JavaScript のすべての変数は、他のオブジェクト指向言語とは異なり、厳密に型指定されているため、JavaScript の変数宣言には型が含まれません。 var キーワードを使用して変数を宣言するか、次のように変数名を直接記述します。 2 つの宣言の違いは何ですか? また、2 つの異なる宣言方法があるのはなぜですか? これには JavaScript の変数のスコープが関係します。 JavaScript では、変数のスコープにはグローバル レベルと関数レベルが含まれます。
グローバル変数は関数の外で宣言できます。上記のどの宣言方法を使用しても、関数の外で宣言された変数はグローバル変数です。例:
コードをコピー
コードは次のとおりです:
実行結果: 1
ただし、この場合、変数を使用する場合は、最初に関数を呼び出す必要があることに注意してください。 foo( ) など、変数を初期化する変数を宣言します。それ以外の場合は、「変数 v が未定義です」エラーが発生します。
グローバル変数は window.$ ($ は変数名を表します) を通じてアクセスできるため、window オブジェクトのプロパティとして存在します。もちろん、変数名を使用して直接アクセスすることもできます。なぜこの 2 つのアクセス方法があるのかについて説明します。
関数内で var キーワードを使用して宣言された変数は関数レベル変数となり、そのスコープは関数の内部に制限されます。例:
コードをコピー
コードは次のとおりです:
実行結果: 1 変数 "v" は未定義です
上記の分析により、次のことがわかります。キーワード var は関数レベルの変数を定義します。
慎重な友人は、関数の内部と外部で同じ変数が定義されたら結果はどうなるのかと尋ねるかもしれません。例:
コードをコピー
コードは次のとおりです:
実行結果: 未定義
! ! ! ! ! v が関数 foo() の外で明確に定義されているのはなぜですか? 落ち込んでいる人もいるかもしれません。これには JavaScript の解析が含まれます。経験によれば、関数本体内の変数に対する JavaScript の解析プロセスは次のとおりです。
すべての var キーワードを検索し、その変数宣言を関数本体の先頭に置きます。このように、割り当てと使用は変更されません。 JavaScript は実際には以下と同等です:
コードをコピー
コードは次のとおりです:
运行結果:2 未定義