JavaScript 変数宣言ステートメントがどこに出現しても、他のコードよりも前に最初に実行されます。 var キーワードを使用して宣言された変数のスコープは、現在の実行コンテキストです。これは周辺関数である場合もあれば、変数が関数本体の外で宣言されている場合はグローバル変数である場合もあります。
関数本体の外側で定義されたものはグローバル変数、関数本体の内側で定義されたものはローカル変数です。ここでの定義は、var による宣言を指します。
JavaScript には暗黙的なグローバルの概念があり、宣言されていない変数はグローバル オブジェクト プロパティになることを意味します。例:
function test(){ myname = "huming"; alert(myname); } test(); // "huming" alert(myname); //"huming"
2 つの結果は同じであり、myname がグローバル変数であることを示しています。
では、暗黙的なグローバル変数と明示的に定義されたグローバル変数の間に違いはあるのでしょうか? 。答えは間違いなく「はい」です。以下の例を見てください:
// 定义三个全局变量 var global_test = ; global_test = ; // 反面教材 (function () { global_test = ; // 反面教材 }()); // 试图删除 delete global_test; // false delete global_test; // true delete global_test; // true // 测试该删除 alert(typeof global_test); // "number" alert(typeof global_test); // "undefined" alert(typeof global_test); // "undefined"
上記の例からわかるように、関数の外で var で定義された global_test1 は削除できません。また、var で定義されていない global_test2 と global_test3 は (関数本体内で作成されたかどうかに関係なく) 削除されます。
要約すると、関数本体の外側で var を介して宣言されたグローバル変数は削除できませんが、暗黙的なグローバル変数は削除できます。
ここに注意してください: JavaScript には「ホイスティング」(一時停止/上位解析/事前解析) と呼ばれる動作があります。
例で説明してみましょう:
var myname = "huming"; //声明全局变量 function test() { alert(myname); var myname = "local_huming"; alert(myname); } test();
2 つのアラートの内容は一貫していると思いますか? ?明らかに一貫性がありませんが、一貫していることは言うまでもありません。 。実際の出力は、「unknown」、「local_huming」です。
上記の例は
と同等ですvar myname = "huming"; //声明全局变量 function test() { var myname; alert(maname);<br> myname = "local_huming"; alert(myname); // "local" } test();
最初のアラートによって出力される myname は、あなたが考えているグローバル変数ではなく、それと同じスコープ (関数本体) 内のローカル変数です。宣言はされていないものの、そのように扱われます。これを「吊り上げ」といいます。
これで明らかになるはずです。関数本体で変数を使用し、後でそれを再宣言すると、エラーが発生することがあります。
書き込み仕様:
function test() { var a = , b = , c = a + b, d = {}, e, f; // function body... }
利点は次のとおりです:
1. 検索を容易にするために、すべてのローカル変数が関数の先頭で定義されます。
JavaScript では、変数名をスコープ に入れるには 4 つの方法があります。
言語が組み込まれており、すべてのスコープに this キーワードと argument キーワードがあります
上記の 4 つの順序は、高から低の優先順位でもあり、一度変数名が宣言されると、他の優先順位の低い変数宣言形式で上書きすることはできません。