関数本文の外側に定義されているものはすべてグローバル変数であり、関数本文内で定義されている変数はローカル変数です。ここでの定義は、varの宣言を指します。
JavaScriptには暗黙のグローバル概念があります。つまり、宣言しない変数はグローバルオブジェクトプロパティになります。例えば:
コードコピーは次のとおりです。
function test(){
myname = "huming";
アラート(myname);
}
テスト(); //「ハミング」
アラート(myname); //「ハミング」
2つの結果は同じであり、MyNameがグローバル変数であることを示しています。
それでは、暗黙のグローバル変数と明確に定義されたグローバル変数に違いはありますか? 。答えが必要です。次の例を参照してください。
コードコピーは次のとおりです。
// 3つのグローバル変数を定義します
var global_test1 = 1;
Global_test2 = 2; //ネガティブ教科書
(関数 () {
Global_test3 = 3; //ネガティブ教科書
}());
//削除しようとします
Global_test1を削除します。 // 間違い
Global_test2を削除します。 // 真実
Global_test3を削除します。 // 真実
//削除をテストします
alert(typeof global_test1); // "番号"
alert(typeof global_test2); // "未定義"
alert(typeof global_test3); // "未定義"
上記の例から、関数の外側のVARによって定義されたGlobal_Test1は削除できませんが、VARによって定義されていないGlobal_Test2およびGlobal_Test3が削除されていることがわかります(関数本文で作成されたかどうか)。
要約すると、関数の外側のVARによって宣言されたグローバル変数を削除することはできませんが、暗黙のグローバル変数を削除することができます。
ここで注意してください:JavaScriptには「Hoisting」(吊り下げ/停止解析/事前発生)と呼ばれる動作があります。
例を使用して説明しましょう。
コードコピーは次のとおりです。
var myname = "huming"; //グローバル変数を宣言します
function test(){
アラート(myname);
var myname = "local_huming";
アラート(myname);
}
テスト();
アラートの内容は2回一貫していると思いますか? ?明らかに一貫性がないのですが、その一貫性を言う必要がありますか? 。実際の出力は、「未定義」、「local_huming」です。
上記の例は同等です
コードコピーは次のとおりです。
var myname = "huming"; //グローバル変数を宣言します
function test(){
var myname;
alert(maname); <br> myname = "local_huming";
アラート(myname); // "地元"
}
テスト();
最初のアラート出力myNameは、あなたが思うグローバル変数ではなく、スコープ内のローカル変数(関数本体)です。宣言されていませんが、宣言と見なされています。これは「巻き上げ」と呼ばれるものです。
これは理解する必要があります。関数本文で変数を使用し、後でそれを再作成すると、エラーが発生する可能性があります。
仕様の作成:
コードコピーは次のとおりです。
function test(){
var a = 1、
b = 2、
c = a + b、
d = {}、
E、
f;
//機能ボディ...
}
利点は次のとおりです。
1.すべてのローカル変数は、関数の開始時に定義されます。これは、検索に便利です。
2.変数が定義される前に、論理エラーが使用されないようにします。
JavaScriptの変数宣言を理解しましたか?上記のコンテンツは非常に詳細で理解しやすいです。最終的な要約も非常に適切です。お見逃しなく。