JavaScript_javascript スキルにおける変数の定義と変数の優先順位の問題についてのディスカッション

WBOY
リリース: 2016-05-16 16:34:13
オリジナル
1228 人が閲覧しました

以下のコードを見てください:

コードをコピーします コードは次のとおりです:

if (!(ウィンドウ内の "aa")) {
alert('オーマイガッド');
var aa = 1; }
alert(ウィンドウ内の「aa」);
アラート(aa);

次の質問に答えてください:

エラーは報告されますか?何回出てくるんだろう?

2 番目のアラートは本当ですか?
3 番目のアラートには何が表示されますか?
なぜ?
よく考えてテストしてください。正解した場合は、次の記事を読む必要はありません。

---------------------------

JS で変数を定義するのは簡単すぎます。var を使用するだけ、または var を使用しなくても:


コードをコピー コードは次のとおりです:
var a = 1;

ここで、a は変数名、1 は変数値です。ああ、これは基本的すぎます。以下のコードを見てください:

コードをコピー コードは次のとおりです:
var a;
アラート(a);

firebug でテストすると、unknown という文字列が表示されます。これは変数が未定義であることを示しているようです。しかし、私はすでに var を持っている、これが定義であり、付加価値がないだけだと思います。
本当に未定義のことをやってみましょう:

コードをコピーします コードは次のとおりです:
アラート(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 は先頭に配置されます。前進。

ここで、記事の冒頭の質問に対する答えを公開します:

2 つのアラートのみがポップアップし、if 内のアラートは実行されません。var 宣言の事前の性質により、実際のコードは次のようになります。

コードをコピー コードは次のとおりです:

var aa;
if (!(ウィンドウ内の "aa")) {
alert('オーマイガッド');
aa = 1; }
alert(ウィンドウ内の「aa」);
アラート(aa);

aa は空ですが、a は存在し、値は未定義であるため、window の 'aa' で判定すると真となります。したがって、if コードは実行されません。最後の 2 つのアラートについては説明しません。

個人的には、これは非常にナンセンスな質問だと思いますが、私たちは彼の理由を理解する必要がありますが、彼の罠を軽蔑します。

上記の質問は、私がこの記事を書いた理由でもあります。オンライン記事でこのコードを見つけましたが、それには答えがなかったので、stackoverflow に質問しました。外。答えはこの記事です。

しかし、これは実際には非常に基本的な質問です。 ! !

ははは、許してください。後ほど別の質問があります:


コードをコピー コードは次のとおりです:
var b = {}
アラート(b.aa);
アラート(b.aa.bb);

これも変数を宣言する方法です。では、このコードはエラーを報告しますか?なぜ?
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート