javascript - 次のコードが「未定義」を出力するのはなぜですか?
迷茫
迷茫 2017-06-12 09:30:20
0
6
750

コードは以下のように表示されます:

リーリー

該当する説明を読みましたが、変数宣言は昇格するが、変数代入は昇格しないということなのですが、まだ理解できません。 if ステートメント ブロック内のコードは実行されましたか?そうでない場合、どのステートメントによって変数が昇格されましたか?実行すると、a の値は 1 になるはずです。
次のコードをコンソールに入力しようとしました

リーリー リーリー
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(6)
巴扎黑

if(ウィンドウ内の「a」)
var a = 1;
alert(a);

いいねを押す +0
Ty80

リーリー

質問1

実行されません

質問2

変数のプロモーションはステートメントによって引き起こされるのではなく、JS エンジンが JS コードをコンパイルするときに実際に行われます。

原理は何ですか?

最初の v8 エンジンがコードに遭遇すると、次のようになります:

リーリー

その後、 a が宣言されているため、 !(window の "a") は常に false になります。 if 内のステートメントは実行されません。
したがって、alert(a) の場合、a には値がありません

いいねを押す +0
巴扎黑

あなたのコードを使用したところ、結果はポップアップ1でした

いいねを押す +0
漂亮男人

変数宣言は次のコードにアップグレードされます

リーリー

変数宣言がアップグレードされた後、最初に a が定義され、次に if ステートメントが入力されます。 a は反転された後に false になるため、if ステートメント内のコードは実行されません。ポップアップするものはundefined

です
いいねを押す +0
给我你的怀抱

var a;
if(!(a in window)){

リーリー

}
alert(a);
が true でない場合、もちろん内部のコードは実行されないため、a が未定義であっても問題はありません

いいねを押す +0
伊谢尔伦

リーリー

JavaScript エンジンがこのコードを解析すると、次のように解析されます:

リーリー

あなたの a は window のプロパティとして宣言されているため、if 条件は常に false であり、値が割り当てられていない場合、 a は未定義です。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート