javascript的scope

javascript和其他語言的scope有一個很大的差異。

javascript只有function裡,才能產生scope。

一般的語言特性以java為例:

for(int i =0;i<5;i++){
       //可以看到i變數
       System.out.println(i);
}

//看不到i變數

if(true){
      int i =53;
      //可以看到i變數
      System.out.println(i);
}

//看不到i變數

以上這段程式碼,變數i只存在於迴圈內,當離開回圈則看不到。   javascript example: for loop

for(var i = 0;i<5;i++){

}
//i值會等於5
console.log(i);

if  loop

if(true){
var b = 10;
}
//b會等於10
console.log(b);

在function將產生一個scope:

(function(){
    var a = 5;
     //a = 5;
     console.log(a);
})();

//將會產生錯誤,找不到a變數
console.log(a);

以下是javascript scope參照方式:

var i=3;
(function(){
     //i會等於3
     console.log(i);
})();

當i變數無法在這個scope找到此變數時,將會往上一層去尋找。

var i=3;
(function(){
     //undefined
     console.log(i);
     var i=5;
})();

在同一個scope已經定義了一個變數時,即使定義在印出之後,仍然會找相同scope的變數。