2016-09-01 41 views
0
var x = "hi!"; 
request(url, function(error, response, body) { 
    console.log(x); //prints "hi!"   
}); 

如果我刪除線console.log(x)console.log('hello!')替換它,並把一個斷點在WebStorm那行,如果我嘗試評估x,它說「的ReferenceError:X沒有定義」。變量何時成爲JavaScript函數環境的一部分?

這是爲什麼? WebStorm是如何工作的,或者JavaScript是否有某種類型的預處理器,只包含函數中使用的變量,在它的關閉中?

+1

Webstorm的調試器中運行可能[嚴格模式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode) –

+0

@RobM。我的腳本頂部也有「嚴格使用」的字樣。嚴格模式如何影響這一點? – Ayush

回答

3

JavaScript編譯器檢查函數,並確定它引用哪些自由變量,並且只有這些變量放入閉包環境中。如果在功能中沒有console.log(x),則不需要將x放入環境中。

對於相關的問題,請參見

Definition of 'closures'