"IF((!" "A" "ウィンドウ)){VARのA = 1;}アラート();なぜ結果は未定義です"

すべての変数は、グローバル属性ウインドウあるので、その文のvar A = 1; window.aに相当= 1;
すべての変数はスコープの先端に宣言されています
alert("a" in window);
var a;

この文は、警告の後ですが、JavaScriptエンジンは、最初のコードの最後の効果の上にすべての変数宣言、その後、これらの変数の宣言をスキャンしますので、警告ポップアップは、まだ本当であるこのですが。

var a;
alert("a" in window);
この行は変数の宣言と変数の代入が含まれているため、あなたは、コードを次のステートメントを分割することができ、変数の宣言が先行しているが、ない変数の割り当てがありません。だから、この質問のために、私たちは、として理解することができます。
var a;    //声明
a = 1;    //初始化赋值

一緒に持つ変数の宣言と代入は、JavaScriptエンジンが自動的に事前に宣言変数するために、2つに分割されますとき、彼はコードの予期しない初期の結果の実装に影響を与える可能性があるので、ステップ代入しません

だから、後でこれらの概念を知って、私たちはコードのタイトルを振り返って、実際には、それは同等です:
var a;
if (!("a" in window)) {
    a = 1;
}
alert(a);

最初の文、そして1の値がない場合、結果が定義されていないので、代入文が実行されることはありませんウィンドウは、常にそこにあることは明らかであるが存在するかどうかを決定します。タイトルの手段だから、

おすすめ

転載: www.cnblogs.com/yujiao-99/p/12656389.html
おすすめ