ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript変数宣言の深い理解_基礎知識

JavaScript変数宣言の深い理解_基礎知識

WBOY
WBOYオリジナル
2016-05-16 16:30:501453ブラウズ

C/C と比較して、ECMAScript の for ループはローカル コンテキストを作成できません。

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

for (var k in {a: 1, b: 2}) {
アラート(k);
}

alert(k); // ループは終了しましたが、変数 k はまだ現在のスコープ内にあります
変数は常に、var キーワードを使用することによってのみ宣言できます。

上記の代入ステートメント:

a = 10; これは単にグローバル オブジェクトに新しいプロパティを作成するだけです (ただし、これは変数ではありません)。 「変数ではない」とは変更できないという意味ではなく、ECMAScript仕様の変数概念に準拠していないため「変数ではない」(グローバルオブジェクトのプロパティになり得る理由)これは完全に JavaScript オブジェクトにグローバルがあるためであり、この操作は変数を宣言するのではなく、属性
をグローバル オブジェクトに追加することです。
問題を説明するために簡単な例を見てみましょう

コードをコピーします コードは次のとおりです:
if (!(ウィンドウ内の「a」)) {
var a = 1;
}
アラート(a);

まず、すべてのグローバル変数は window の属性です。 var a = 1; は window.a = 1; と同等です。 次のメソッドを使用して、グローバル変数が宣言されているかどうかを確認できます


ウィンドウ内の「変数名」


2 番目に、すべての変数宣言はスコープの先頭にあります。同様の例を見てください。



コードをコピー コードは次のとおりです: alert(ウィンドウ内の「a」);
変数



この時点では、宣言がアラートの後にあるにもかかわらず、アラートは true としてポップアップ表示されます。これは、JavaScript エンジンが最初にすべての変数宣言をスキャンし、次にこれらの変数宣言を最終コードに移動するためです。効果は次のとおりです:

コードをコピーします コードは次のとおりです: var a;
アラート(ウィンドウ内の「a」);


第三に、この質問の意味は、このコード行には変数宣言と変数割り当てが含まれているため、変数宣言は進んでいますが、変数割り当ては進んでいないということであることを理解する必要があります。
ステートメントを次のようなコードに分割できます:


コードをコピーします

コードは次のとおりです: var a; //宣言 a = 1; //初期化代入


要約すると、変数宣言と代入を併用すると、JavaScript エンジンが変数宣言を進めるために自動的に 2 つの部分に分割してしまいます。代入ステップが進まないのは、変数宣言に影響を与える可能性があるためです。コードの実行結果。
質問内のコードは次と同等です:


コードをコピーします

コードは次のとおりです: var a; if (!(ウィンドウ内の「a」)) {
a = 1;
}
アラート(a);

上記の例の分析によると、変数を宣言するときは、宣言されたローカル変数の前に var を追加する必要があります。グローバル変数を宣言する場合は、var を追加する必要はありません (変数の数を制限するのが最善です)。グローバル変数を使用し、ローカル変数を使用してみてください)

次に、var を使用するいくつかの機能について説明します

var ステートメントを使用して変数を複数回宣言することは合法であるだけでなく、エラーも発生しません。
再利用されたステートメントに初期値がある場合、それは単に代入ステートメントとして機能します。
初期値を指定せずに宣言を再利用した場合、元の変数には影響しません。
var を使用せずに宣言された変数はグローバル変数として存在し、var を使用して宣言された変数は、特に関数内でローカル変数となります。さらに、テスト後、var を使用した宣言は、var を使用しない場合よりも高速です。関数内でできるだけ多くのローカル変数を設定すると、関数内のグローバル変数のランダムな操作によって変数の操作がより合理的になり、安全かつ高速に実行できます。

オブジェクトを宣言するときは、新しいメソッドよりもはるかに高速な、オブジェクトの self-face メソッドを使用するのが最善です。

変数名はセマンティクスと仕様に配慮するために自分で選択しますが、変数名の長さはコードの実行速度にも影響することに注意してください。長い変数名の宣言は、短い変数名ほど速く実行されません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。