ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript_javascript スキルにおける変数スコープの詳細な分析

JavaScript_javascript スキルにおける変数スコープの詳細な分析

WBOY
WBOYオリジナル
2016-05-16 17:10:231154ブラウズ

JavaScript 変数のスコープを学ぶ前に、いくつかの点を明確にする必要があります。

•JavaScript の変数スコープは、独自のスコープ チェーンに基づいています。

• JavaScript にはブロックレベルのスコープがありません。

• 関数内で宣言された変数は、関数全体で定義されます。

1. JavaScript スコープ チェーン
まず次のコードを見てください:

コードをコピーします コードは次のとおりです。 4;alert(rain); } inner(); //内部関数を呼び出します} Rainman(); //rainman 関数を呼び出します

コードを確認します。 。 JavaScript はまず、変数 Rain が内部関数で定義されているかどうかを確認します。定義されている場合は、内部関数の Rain 変数が使用されます。Rain 変数が内部関数で定義されていない場合、JavaScript は Rain 変数が定義されているかどうかを引き続き確認します。このコードでは、rain 変数が Rainman 関数本体で定義されていないため、JavaScript エンジンは引き続き (グローバル オブジェクトを) 検索して、グローバル オブジェクトに Rain が定義されているかどうかを確認します。 Rain = 1 と定義されているため、最終結果は「1」と表示されます。
スコープ チェーン: JavaScript が変数をクエリする必要がある場合 2 つのオブジェクトが定義されていない場合、検索は続行されます。
上記のコードには、inner、rainman、window の 3 つのスコープ チェーン オブジェクトが順に含まれています。

2. 関数本体内では、ローカル変数は同じ名前のグローバル変数よりも優先されます。


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


3. JavaScript にはブロックレベルのスコープがありません。

これは、他の言語に比べて JavaScript のより柔軟な部分でもあります。 次のコードを注意深く見てください。変数 i、j、k のスコープが同じであり、rain 関数本体全体でグローバルであることがわかります。


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

上記のコードは、変数 x が Rain 関数本体全体で使用でき、再割り当てできることを示しています。このルールにより、「信じられない」結果が生成されます。次のコードを観察してください。


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

は、関数 Rain 内のローカル変数 x が関数本体全体で定義されているためです (var x= 'rain-man'、宣言されています)。これは関数 Rain 内で宣言されています。同じ名前のグローバル変数 x は Rain 関数本体に隠されています。ここで「未定義」が表示されるのは、alert(x) が初めて実行されるとき、ローカル変数 x がまだ初期化されていないためです。
したがって、上記の Rain 関数は次の関数と同等です:


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

関数rain(){ var x;alert( x ); x = 'rain-man';alert( x );}

5.キーワードで定義されるのはグローバル変数です。
コードをコピー コードは次のとおりです:



これも JavaScript 初心者によくある間違いで、意図せずに多くのグローバル変数を残してしまいます。

6. グローバル変数はすべてウィンドウ オブジェクトの属性です

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

;

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