コードは以下のように表示されます:
該当する説明を読みましたが、変数宣言は昇格するが、変数代入は昇格しないということなのですが、まだ理解できません。 if ステートメント ブロック内のコードは実行されましたか?そうでない場合、どのステートメントによって変数が昇格されましたか?実行すると、a の値は 1 になるはずです。 次のコードをコンソールに入力しようとしました
业精于勤,荒于嬉;行成于思,毁于随。
if(ウィンドウ内の「a」)var a = 1;alert(a);
リーリー
実行されません
変数のプロモーションはステートメントによって引き起こされるのではなく、JS エンジンが JS コードをコンパイルするときに実際に行われます。
最初の v8 エンジンがコードに遭遇すると、次のようになります:
その後、 a が宣言されているため、 !(window の "a") は常に false になります。 if 内のステートメントは実行されません。 したがって、alert(a) の場合、a には値がありません
あなたのコードを使用したところ、結果はポップアップ1でした
変数宣言は次のコードにアップグレードされます
変数宣言がアップグレードされた後、最初に a が定義され、次に if ステートメントが入力されます。 a は反転された後に false になるため、if ステートメント内のコードは実行されません。ポップアップするものはundefined
undefined
var a;if(!(a in window)){
}alert(a);が true でない場合、もちろん内部のコードは実行されないため、a が未定義であっても問題はありません
JavaScript エンジンがこのコードを解析すると、次のように解析されます:
あなたの a は window のプロパティとして宣言されているため、if 条件は常に false であり、値が割り当てられていない場合、 a は未定義です。
a
if(ウィンドウ内の「a」)
var a = 1;
alert(a);
リーリー
質問1
実行されません
質問2
変数のプロモーションはステートメントによって引き起こされるのではなく、JS エンジンが JS コードをコンパイルするときに実際に行われます。
原理は何ですか?
最初の v8 エンジンがコードに遭遇すると、次のようになります:
リーリーその後、 a が宣言されているため、 !(window の "a") は常に false になります。 if 内のステートメントは実行されません。
したがって、alert(a) の場合、a には値がありません
あなたのコードを使用したところ、結果はポップアップ1でした
変数宣言は次のコードにアップグレードされます
リーリー変数宣言がアップグレードされた後、最初に a が定義され、次に if ステートメントが入力されます。 a は反転された後に false になるため、if ステートメント内のコードは実行されません。ポップアップするものは
ですundefined
var a;
リーリーif(!(a in window)){
}
alert(a);
が true でない場合、もちろん内部のコードは実行されないため、a が未定義であっても問題はありません
リーリー
JavaScript エンジンがこのコードを解析すると、次のように解析されます:
リーリーあなたの
a
は window のプロパティとして宣言されているため、if 条件は常に false であり、値が割り当てられていない場合、 a は未定義です。