検索

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

javascript - 変数名のプロモーションについて質問がありますか?

次のコードを実行すると、unknown

となります。 リーリー

説明 window'a' は true ですが、いつ宣言されましたか?教えてください、ありがとう!

コードを再度変更しました:

リーリー

結果aは定義されていませんa が宣言されているのに、なぜこのエラーが報告されるのでしょうか?

巴扎黑巴扎黑2764日前602

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

  • 黄舟

    黄舟2017-06-12 09:34:55

    まず変数の改善について話しましょう

    リーリー

    このコードが if のコードブロックに入るかどうかに関係なく、 はまだ存在します

    JavaScript が実行されると、var を通じて定義されたすべての 変数宣言関数 が現在のスコープの最上位に昇格されるためです

    によって作成された変数にはvarブロックレベルのスコープがないため、現在の関数スコープの最上位に昇格されます

    グローバルスコープで定義された変数はすべてウィンドウの属性です

    このコードは実際にはこの順序で実行されます

    リーリー

    定義された

    a,但没有赋值,自然输出了 undefined

    window の ! 'a' については、実際には、'a' 文字列が最初に実行されます

    、結果は false です。 >、window には window.false 属性がなく、if コード ブロックに入らずに false が返されます。 ! 'a' in window 其实是先对 'a' 字符串执行,得到了falsewindow 里没有 window.false 这个属性,返回了 false

    次の例を試すことができます

    リーリー

    2番目の質問

    リーリー

    上記を理解した上で、

    を定義しても意味がありません(昇格はありません)、var 定义(不存在提升),又没进 ifが入力されていないため、定義されずにエラーが報告されます。

    返事
    0
  • 大家讲道理

    大家讲道理2017-06-12 09:34:55

    この実行には何も問題はありません、! 'a' in window这个是false,然后a的赋值没执行,再console不就是undefined么。
    如果想让赋值执行,判断条件改成!('a' in window)以上です。

    それでも理解できない場合は、演算子の優先順位リストを確認してください。

    返事
    0
  • 代言

    代言2017-06-12 09:34:55

    var変数の昇格は宣言時に発生します。編集段階では関数またはコードの先頭にコード宣言が置かれるため、次のようになります。 リーリー

    それで

    a in windowtrue

    に関しては リーリー

    コードには

    var a。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a123が含まれていません

    https://developer.mozilla.org...

    返事
    0
  • 阿神

    阿神2017-06-12 09:34:55

    最初の段落を誤解しています
    'a' in window は false である必要があります'a' in window 为 false
    !'a' in window 才为 true
    才会执行 var a = 123;!'a' in window は true である必要があります
    var a が実行されます = 123 ;

    値 123 が割り当てられるのは のみです🎜

    返事
    0
  • 学习ing

    学习ing2017-06-12 09:34:55

    パンダサン正傑=_=

    返事
    0
  • キャンセル返事