x = 1;
alert(x);
var y = function() {
alert(x);
var x = 2;
alert(x);
}
y();
3 つのアラートの結果: 1
、undefined
、2
(Chrome 25)
私の質問は: 2 番目のアラートが定義されていないのはなぜですか? なぜ1ではないのですか?グローバル変数 x はありませんか?
x = 1;
alert(x);
var y = function() {
alert(x);
var x = 2;
alert(x);
}
y();
3 つのアラートの結果: 1
、undefined
、2
(Chrome 25)
私の質問は: 2 番目のアラートが定義されていないのはなぜですか? なぜ1ではないのですか?グローバル変数 x はありませんか?
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」ではなく「未定義」です。したがって、関数内で変数を宣言するときは、関数の先頭で変数を宣言することをお勧めします。