2016-01-19 109 views
3

我試着寫在節點的REPL一個簡單的代碼,但遇到了一些困難,我來了一個塊代碼:節點的REPL不承認

輸入命令時在同一時間全部都在同一線路工作正常,
但是當使用圓括號代碼塊{ ... code ... }
(並在每行之後按回車鍵)包裝它時,我在關閉之後出現錯誤(})。

enter image description here

如你我已經添加在圖片中看到 - 執行相同的代碼,在一次一行,工作正常。

+0

提示:'{}'是一個對象字面 – nem035

+0

節點V5甚至不會關閉塊讓你的舊版本更接近!無論如何,你爲什麼要這麼做?我懷疑爲什麼REPL不會執行這樣的任意代碼塊有一個很好的理由 –

+0

謝謝@nem,但我想寫一個代碼塊(通過REPL測試js不在一行中)。 – GrizzlyMcBear

回答

1

明白了,
我應該在括號後加了;

這是現在運行的代碼的結果:

enter image description here

2

你的解釋器認爲你要創建一個對象字面值,就像{ 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