javascript定義変数と優先度の問題

3205 ワード

この文章は前の関数の優先度の文章と結合して見ることができます.
下のコードを見てください.
if (!("aa" in window)) {  

    alert('oh my god');

    var aa = 1;  

}  

alert("aa" in window);

alert(aa);
以下の質問に答えます.
  • は間違えますか?何回弾けますか
  • 番目のalertはtrueですか?それともfalseですか?
  • 第3のalertは何を弾きますか?
  • なぜですか?
  • 考えて、そしてテストして、もしあなたが正しいと答えたら、後の文章は見なくてもいいです.
    -------------------------------------------------
    JSで変数を定義するのは簡単すぎて、直接的なvarで、varを使わなくてもいいです.
    var a=1
    ここaは変数名で、1は変数値です.えっと、これは基礎がありすぎます.下のコードを見てください.
    var a;alert(a)
    firebugでテストするとundefinedがイジェクトされます.これはよく知られている文字列です.変数が定義されていないことを表しています.でも、私はもうvarだと思います.これは定義ですよ.ただ付加価値がないだけです.
    本当に定義されていないものを来ました.
    alert(a)
    そうです.直接alertにはまったく現れなかった変数です.これはどうなりますか?
    firebugは直接にエラーを報告しました.a is not definedという意味です.aは定義されていません.これは前のコードと結び付けて見て、困惑させられます.これは定義されていないと前の未定義とは何が違いますか?
    前のコードは同じです.
    var a=undefinedalert(a)
    つまり、変数を宣言して値を与えない場合、JSは変数にundefined値を伝えます.これは「値」です.aはすでに値があると説明していますが、この値を「未定義」と呼びます.
    後の直接alertは変数が現れていないから、つまりこれが本当の未定義です.
    簡単に言うと、JSには値のない変数は存在しません.変数宣言の時には値が割り当てられます.
    次にコードを見ます.
    alert(a)var a=1
    このコードは間違えますか?alertの時変数aがまだ現れていないからです.
    しかし、これは間違っていませんでした.undefined値をポップアップしました.変数aがすでに存在していることを示していますが、値だけは私達が欲しいのではなく、undefinedです.これはまた何の問題ですか?
    var変数宣言は関数宣言と同じなので、先のコードはこうです.
    var a;alert(a)a=1;
    これで分かります.
    したがって、この問題の鍵は:var声明は、スコープの先端に到達するが、付加価値はないということです.個人的にはJSの欠陥だと思います.
    今は変数宣言をすべて作用域の前に置くというコードの習慣があります.これを考慮します.つまり、前に書かなくても、JSは前に行きます.
    文頭問題の答えを出します.
    二つのalertだけが弾けますが、ifの中のalertは実行されません.var声明の早期性のため、本当のコードはこのようになります.
    var aa;
    
    if (!("aa" in window)) {  
    
        alert('oh my god');
    
        aa = 1;  
    
    }  
    
    alert("aa" in window);
    
    alert(aa);
    aは空ですが、’aa’in windowで判断すると本当です.aaは確かに存在しています.値はundefinedです.だからifコードは実行されません.後の二つのalertは言いません.
    個人はこれが1つのとても不条理な問題だと感じて、私達は彼の原因を理解するべきで、しかし彼のこのような落とし穴を軽蔑します.
    上記の問題も私がこの文章を書いた理由です.このコードは私がネットの文章から見たものですが、彼の中には答えがありません.私は絶対に姉に乗ることができません.stackover flowに行って聞いてやっと分かりました.答えはこの文章です.
    しかし、これは基礎的な問題です.
    ハハ、許してください.後にもう一つの問題があります.
    var b={}alert(b.aa);alert(b.a.bb)
    これも変数を宣言する方法ですが、このコードはエラーとして報告されますか?なぜですか
    本論文のリンク:  javascript定義変数と優先度の問題.転載は保留してください.