6
x = 1; 
alert(x); 
var y = function() { 
    alert(x); 
    var x = 2; 
    alert(x); 
} 
y(); 

3 つのアラートの結果: 1undefined2(Chrome 25)

私の質問は: 2 番目のアラートが定義されていないのはなぜですか? なぜ1ではないのですか?グローバル変数 x はありませんか?

4

3 に答える 3

0

JavaScript のスコープは関数オブジェクトであるためです。関数内で何らかのコード (コード サンプル) を実行すると、"alert(x)" は関数内に "x" の定義があるかどうかを検出します。したがって、この関数には「var x = 2」があります。しかし、JavaScript ランタイムはコードを次のように説明します。

x = 1; 
alert(x); 
var y = function() { 
  var x;
  alert(x); 
  x = 2; 
  alert(x); 
} 
y(); 

したがって、2 番目のアラートの x は「1」ではなく「未定義」です。したがって、関数内で変数を宣言するときは、関数の先頭で変数を宣言することをお勧めします。

于 2013-04-02T14:17:31.703 に答える