JavaScript宣言変数

2363 ワード

JavaScriptの変数宣言文は、どこにあっても他のコードより先に実行されます.varキーワードを使って変数を宣言するスコープは現在の実行文脈であり、周辺関数である可能性があります.あるいは、変数宣言が関数体の外にある場合はグローバル変数です.
関数の外にあるすべてが大域変数に属することを定義し、関数の中の局所変数を定義します.ここの定義はvarを通じて宣言されたものです.
JavaScriptには大域的な概念が含まれています.あなたが宣言しないいかなる変数も大域的なオブジェクト属性になります.たとえば:

function test(){
myname = "huming";
alert(myname);
}
test();  // "huming"
alert(myname);  //"huming" 
二つの結果は同じで、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_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 = ,
b = ,
c = a + b,
d = {},
e,
f;
// function body...
}
メリットは:
1、すべての局所変数は関数で始まり、探しやすいように定義されています.
2、変数が定義される前に使用する論理エラーを防止します.
javascriptでは、一つの変数名(name)がアクティブエリアに入る四つの方法があります.
言語が内蔵されています.すべての機能領域にはthisとargmentsのキーワードがあります.
形式パラメータ,関数のパラメータは全スコープで有効である.
関数宣言
変数宣言
上に挙げた4つの順序も優先度の高い順であり、変数名が宣言されると、他のより低い優先度の変数宣言形式によって上書きされることはあり得ない.