コードは以下のように表示されます:
リーリー該当する説明を読みましたが、変数宣言は昇格するが、変数代入は昇格しないということなのですが、まだ理解できません。 if ステートメント ブロック内のコードは実行されましたか?そうでない場合、どのステートメントによって変数が昇格されましたか?実行すると、a の値は 1 になるはずです。
次のコードをコンソールに入力しようとしました
PHP中文网2017-06-12 09:32:20
リーリー
実行されません
変数のプロモーションはステートメントによって引き起こされるのではなく、JS エンジンが JS コードをコンパイルするときに実際に行われます。
最初の v8 エンジンがコードに遭遇すると、次のようになります:
リーリーその後、 a が宣言されているため、 !(window の "a") は常に false になります。 if 内のステートメントは実行されません。
したがって、alert(a) の場合、a には値がありません
漂亮男人2017-06-12 09:32:20
変数宣言は次のコードにアップグレードされます
リーリー変数宣言がアップグレードされた後、最初に a が定義され、次に if ステートメントが入力されます。 a は反転された後に false になるため、if ステートメント内のコードは実行されません。ポップアップするものはundefined
给我你的怀抱2017-06-12 09:32:20
var a;
if(!(a in window)){
}
alert(a);
が true でない場合、もちろん内部のコードは実行されないため、a が未定義であっても問題はありません
伊谢尔伦2017-06-12 09:32:20
リーリー
JavaScript エンジンがこのコードを解析すると、次のように解析されます:
リーリーあなたの a
は window のプロパティとして宣言されているため、if 条件は常に false であり、値が割り当てられていない場合、 a は未定義です。