我試着寫在節點的REPL
一個簡單的代碼,但遇到了一些困難,我來了一個塊代碼:節點的REPL不承認
輸入命令時在同一時間全部都在同一線路工作正常,
但是當使用圓括號代碼塊{ ... code ... }
(並在每行之後按回車鍵)包裝它時,我在關閉之後出現錯誤(}
)。
如你我已經添加在圖片中看到 - 執行相同的代碼,在一次一行,工作正常。
我試着寫在節點的REPL
一個簡單的代碼,但遇到了一些困難,我來了一個塊代碼:節點的REPL不承認
輸入命令時在同一時間全部都在同一線路工作正常,
但是當使用圓括號代碼塊{ ... code ... }
(並在每行之後按回車鍵)包裝它時,我在關閉之後出現錯誤(}
)。
如你我已經添加在圖片中看到 - 執行相同的代碼,在一次一行,工作正常。
你的解釋器認爲你要創建一個對象字面值,就像{ var: x }
一樣。 { var x; }
不是一個好的對象語法,因爲識別符var
後面應該有冒號,而不是x
。因此,SyntaxError
。
可畢竟通過預先任何提示的,它實際上是一個代碼塊強制解析器認爲這是一個代碼塊:
label: { var x; }
if (true) { var x; }
do { var x; } while (false);
編輯:另外,請注意,沒有充分的理由做這個。如果您沒有使用代碼塊作爲流控制語句的語句組,或者作爲標籤的目標,那麼它是完全沒有用處的(並且是您發現的難以跟蹤的錯誤的潛在來源)。
在其他語言中,您可能正在控制變量的範圍(我希望您希望確保x
在塊之外不可見?)。在JavaScript中,只有函數的範圍是。因此,隔離來自周圍環境的變量,你需要一個函數:
{
var x1;
};
x1; // undefined
(function() {
var x2;
})();
x2; // Uncaught ReferenceError: x is not defined
提示:'{}'是一個對象字面 – nem035
節點V5甚至不會關閉塊讓你的舊版本更接近!無論如何,你爲什麼要這麼做?我懷疑爲什麼REPL不會執行這樣的任意代碼塊有一個很好的理由 –
謝謝@nem,但我想寫一個代碼塊(通過REPL測試js不在一行中)。 – GrizzlyMcBear