重複の可能性:
Javascript スコープ変数理論
こんにちは、みんな、
変なことを聞きたい。これがコードです。
var a = "定義済み"; 関数 f() { アラート(a); 変数 a = 5; } f();
アラート「未定義」
なぜ私が「未定義」になっているのか、誰でも説明できますか。
ファティ..
重複の可能性:
Javascript スコープ変数理論
こんにちは、みんな、
変なことを聞きたい。これがコードです。
var a = "定義済み"; 関数 f() { アラート(a); 変数 a = 5; } f();
アラート「未定義」
なぜ私が「未定義」になっているのか、誰でも説明できますか。
ファティ..
それは私が推測するJavaScriptホイストと呼ばれています。このビデオとその解決策の詳細については、次のビデオをご覧ください。
http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/
機能させるには、var
キーワード form variableを削除する必要がありa
ます。
var a = "defined";
function f() {
alert(a);
a = 5;
}
f();
基本的に、それは変数のスコープの問題です。キーワードを削除var
すると、変数がグローバルに使用可能になります。したがって、今回はエラーは発生しません。
関数では、新しいスコープを取得します。
関数内のは、グローバル変数をマスクvar a
するローカル変数を宣言します。a
The assignment to a
takes place later (after the alert), so until then a
is undefined.
The confusing part is that it does not matter if you have the var a
declaration on top or anywhere else in the function (can even be inside an if). The effect is the same: It declares a variable for that scope (effective even for code that is located before the declaration). That is why jslint recommends to declare all local variables on top.