ホームページ  >  に質問  >  本文

javascript - 次のコードが「未定義」を出力するのはなぜですか?

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

リーリー

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

リーリー リーリー
迷茫迷茫2686日前717

全員に返信(6)返信します

  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

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

    返事
    0
  • PHP中文网

    PHP中文网2017-06-12 09:32:20

    リーリー

    質問1

    実行されません

    質問2

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

    原理は何ですか?

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

    リーリー

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

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

    返事
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:32:20

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

    リーリー

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

    です

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:32:20

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

    リーリー

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:32:20

    リーリー

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

    リーリー

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

    返事
    0
  • キャンセル返事