次のコードを見てください。
コードコピーは次のとおりです。
if(!( "aa" in window)){
アラート(「ああ、神」);
var aa = 1;
}
アラート(ウィンドウ内の "aa");
アラート(AA);
次の質問に答えてください。
エラーが報告されますか?何回ポップアップしますか?
2番目のアラートはtrueまたはfalseですか?
3番目のアラートで何がポップアップしますか?
なぜ?
考えてから、テストしてください。正しく答える場合は、次の記事を読む必要はありません。
-----------------------------
JSの変数の定義は簡単すぎます。 varを使用することも、varを使用しないこともできます。
コードコピーは次のとおりです。
var a = 1;
ここでは、Aは変数名、1は変数値です。悲しいかな、これは基本的すぎます。次のコードを見てください。
コードコピーは次のとおりです。
var a;
アラート(a);
FireBugテストでは、未定義がポップアップ表示されます。これは非常によく知られている文字列であり、変数が未定義であることを示しているようです。しかし、私はすでにそれを変えたと思います、これは定義ですが、添付の価値はありません。
本当に定義されていないことをしましょう:
コードコピーは次のとおりです。
アラート(a);
そうです、まったく現れたことのない変数に警告するだけです。何が起こりますか?
FireBugはエラーを直接報告しました:Aは定義されていません。 Aが定義されていないことを意味します。前のコードを組み合わせると、これは混乱しています。この未定義と以前の未定義の違いは何ですか?
実際、以前のコードはこれに相当します。
コードコピーは次のとおりです。
var a =未定義;
アラート(a);
言い換えれば、変数が値を割り当てることなく宣言されると、JSは未定義の値を変数に渡します。これは「値」であることに注意してください。つまり、Aにはすでに値があり、この値は「未定義」と呼ばれます。
直接アラートの背後にある変数が現れたことはありません。つまり、これは本当に未定義です。
簡単に言えば、JSに値がない変数はありません。変数が宣言されたときに値が割り当てられます。
次に、次のコードを見ます。
コードコピーは次のとおりです。
アラート(a);
var a = 1;
このコードはエラーを報告しますか?アラートがアラートになると、変数Aがまだ表示されていないためです。
しかし、このようにエラーはありませんが、未定義の値が表示されます。これは、変数Aがすでに存在することを示していますが、値は私たちが望むものではなく、未定義です。何が問題ですか?
VAR変数宣言は関数宣言と同じであるため、高度になります。実際、上記のコードは次のようになります。
コードコピーは次のとおりです。
var a;
アラート(a);
a = 1;
このようにしてあなたが理解するでしょう。
したがって、この問題の鍵は次のとおりです。VAR宣言は事前にスコープの最上部に到達しますが、添付の値はそうではありません - 非常にもつれた設定です。なぜこれをしたのかわかりません。個人的には、これはJSの欠陥だと思います。
現在、範囲の前に変数宣言を置くことを提唱するコード習慣があります。おそらくこれを考慮してください - あなたがそれらを前に書いていなくても、JSは事前に先に進みます。
次
VAR宣言が進んでいるため、Alertが実行されない場合、アラートが実行されます。実際のコードは次のようになります。
コードコピーは次のとおりです。
var aa;
if(!( "aa" in window)){
アラート(「ああ、神」);
aa = 1;
}
アラート(ウィンドウ内の "aa");
アラート(AA);
AAは空ですが、ウィンドウの「AA」で判断されると真実になります。これは、値が未定義であるためです。したがって、コードが実行されない場合。最後の2つのアラートについては話しません。
個人的には、これは非常に無意味な質問だと感じています。私たちは彼の理由を理解する必要がありますが、彼をtrapとして軽spします。
上記の質問は、私がこの記事を書いた理由でもあります。オンライン記事からこのコードを見ましたが、答えはありません。私は妹を打ち負かすことができなかったので、私はStackoverflowに行き、調べるように頼みました。答えはこの記事です。
しかし、これは実際には非常に基本的な質問です! ! !
ハハ、私を許してください、別の質問があります:
コードコピーは次のとおりです。
var b = {}
アラート(b.aa);
アラート(b.aa.bb);
これは、変数を宣言する方法でもあります。それで、このコードはエラーを報告しますか?なぜ?