javascript - 変数名のプロモーションについて質問がありますか?
巴扎黑
巴扎黑 2017-06-12 09:32:55
0
5
599

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

となります。 リーリー

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

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

リーリー

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

巴扎黑
巴扎黑

全員に返信(5)
黄舟

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

リーリー

このコードが 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
大家讲道理

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

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

いいねを押す +0
代言

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

それで

a in windowtrue

に関しては リーリー

コードには

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

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

いいねを押す +0
阿神

最初の段落を誤解しています
'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

パンダサン正傑=_=

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