2016-09-01 6 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'

関連する問題