0

重複の可能性:
Javascript スコープ変数理論

こんにちは、みんな、

変なことを聞​​きたい。これがコードです。

var a = "定義済み";
関数 f() {
   アラート(a);
   変数 a = 5;
}
f();

アラート「未定義」

なぜ私が「未定義」になっているのか、誰でも説明できますか。

ファティ..

4

2 に答える 2

2

それは私が推測する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すると、変数がグローバルに使用可能になります。したがって、今回はエラーは発生しません。

于 2011-01-12T08:55:59.083 に答える
0

関数では、新しいスコープを取得します。

関数内のは、グローバル変数をマスク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.

于 2011-01-12T08:58:38.433 に答える