JavaScript変数宣言の詳細

2407 ワード

関数の外にあるすべてが大域変数に属することを定義し、関数の中の局所変数を定義します.ここの定義はvarを通じて宣言されたものです.
JavaScriptには大域的な概念が含まれています.あなたが宣言しないいかなる変数も大域的なオブジェクト属性になります.たとえば:
 
  
function test(){
    myname = "huming";
    alert(myname);
}
test();  // "huming"
alert(myname);  //"huming"
 二つの結果は同じで、mynameはグローバル変数であると説明しています.
では、暗黙的なグローバル変数と明確に定義されているグローバル変数の違いはありますか?答えは必ずあります.次の例を見てください.
 
  
//
var global_test1 = 1;
global_test2 = 2; //
(function () {
    global_test3 = 3; //
}());
//
delete global_test1; // false
delete global_test2; // true
delete global_test3; // true
//
alert(typeof global_test1); // "number"
alert(typeof global_test2); // "undefined"
alert(typeof global_test3); // "undefined"
 上記の例から、関数以外でvarによって定義されるglobal_test 1は削除できません.var定義のglobal_を経ていません.test 2とglobal_test 3はすべて削除されました.
要約すると、関数の外でvarによって宣言されたグローバル変数は削除されません.また、暗黙的なグローバル変数は削除されます.
ここで注意します.JavaScriptには「hoisting」という行為があります.
一例を通して説明します.
 
  
var myname = "huming"; //
function test() {
    alert(myname);
    var myname = "local_huming";
    alert(myname);
}
test();
 2回のalertの内容は同じだと思いますか?明らかに一致していないのに、同じことを言う必要がありますか?実際の出力は「undefined」、「local uhuming」です.
上の例は
 
  
var myname = "huming"; //
function test() {
  var myname;
  alert(maname);
  myname = "local_huming";
  alert(myname);    // "local"
}
test();
初めてalertが出力するmynameは、グローバル変数ではなく、機能領域内の局所変数です.まだ声明されていませんが、声明として扱われました.これはいわゆる「Hoisting」です.
これで分かりますよね.関数の中で変数を使って、後で再宣言すると、エラーが発生する可能性があります.
表記のルール:
 
  
function test() {
   var a = 1,
       b = 2,
       c = a + b,
       d = {},
       e,
       f;
   // function body...
}
 
メリットは:
1、すべての局所変数は関数で始まり、探しやすいように定義されています.
2、変数が定義される前に使用する論理エラーを防止します.
友達はjavascriptの変数声明を了解しましたか?以上の内容は詳しくて分かりやすいです.最後の総括もとてもいいです.仲間たちは見逃さないでください.