以下のように
var a = 3;
実際には2つのステップがあります:
1 aを未定義に初期化します
2 aに値3を割り当てます
したがって、いくつかの「信じられない」現象が発生します。つまり、JSの変数が使用できるということです。最初に宣言してから宣言します。これは Java では許可されません。
System.out.println(a);
int a = 1;
コンパイルが失敗します。しかし、JS では次のようにすることができます。
alert(a);
var a;
未定義ですが、エラーは報告されません。これは、 a が実際に宣言されており、未定義であることを示しています。
「var a」のない「alert(a)」だけの場合、JS エンジンはエラーを報告します。
alert(a);
FFは以下の通りです
先に使用してから宣言することもできますが、代入の効果が失われます。以下の通り
alert(a);
var a = 1;
今回の出力は1ではなく未定義のままです。
別の例、
alert('a' in window); // true
var a;
コードは正式にはalertの後に記述されていますが、エンジンは依然としてvar宣言を最初に自動的に処理します。最終的な出力は true です。
これを理解すると、次のコードの結果を理解するのは難しくありません
if (!("a" in window)) {
var a = 1;
}
alert(a);