次のコードを実行すると、unknown
説明 window の
'a' は true
ですが、いつ宣言されましたか?教えてください、ありがとう!
コードを再度変更しました:
リーリー結果aは定義されていません
。 a
が宣言されているのに、なぜこのエラーが報告されるのでしょうか?
黄舟2017-06-12 09:34:55
まず変数の改善について話しましょう
リーリーこのコードが if
のコードブロックに入るかどうかに関係なく、 はまだ存在します
JavaScript が実行されると、var
を通じて定義されたすべての 変数 と 宣言関数 が現在のスコープの最上位に昇格されるためです
によって作成された変数にはvar
ブロックレベルのスコープがないため、現在の関数スコープの最上位に昇格されます
このコードは実際にはこの順序で実行されます
リーリー
定義されたa
,但没有赋值,自然输出了 undefined
! 'a' については、実際には、'a'
文字列が最初に実行されます、結果は false
です。 >、window
には window.false
属性がなく、if コード ブロックに入らずに false
が返されます。 ! 'a' in window
其实是先对 'a'
字符串执行非,得到了false
,window
里没有 window.false
这个属性,返回了 false
次の例を試すことができます
リーリー
2番目の質問
リーリー
上記を理解した上で、を定義しても意味がありません(昇格はありません)、var
定义(不存在提升),又没进 if
が入力されていないため、定義されずにエラーが報告されます。
返事0
大家讲道理2017-06-12 09:34:55
この実行には何も問題はありません、! 'a' in window
这个是false,然后a的赋值没执行,再console不就是undefined么。
如果想让赋值执行,判断条件改成!('a' in window)
以上です。
それでも理解できない場合は、演算子の優先順位リストを確認してください。
代言2017-06-12 09:34:55
var
変数の昇格は宣言時に発生します。編集段階では関数またはコードの先頭にコード宣言が置かれるため、次のようになります。
リーリー
。 a in window
是true
に関しては リーリー
コードにはvar a
。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a
是123
が含まれていません
阿神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 ;