首頁 >web前端 >js教程 >Javascript變數作用域詳解_javascript技巧

Javascript變數作用域詳解_javascript技巧

WBOY
WBOY原創
2016-05-16 17:10:261116瀏覽

變數的作用域指的是變數的可見性,而生命週期則(存活期)則是從另一個角度考察變數。

JS中變數的作用域分為全域變數和局部變量,函數內定義的稱為局部變量,函數外的稱為全域變數。 (「函數外的稱為全域變數」是相對的,另此處討論的前提是用var明確聲明的變量,函數內不用var定義的變數預設是全域變量,當然忽略var聲明變數是不贊成的)。

複製程式碼 程式碼如下:

var glob = 4;//函數外宣告全域變數
function fun() {
    var height = 20; //函數內用var宣告的是局部變數
    weight = 50; //函數內不用var宣告的是全域變數
}
fun();
alert(weight);

JS中沒有區塊級作用域,即用大括號{}包含的。 Java中則有。在main方法中寫入下程式碼
複製程式碼 程式碼如下:

public static void main static void (String... args) {
  for(int i=0;i  }
    {
     = 20;
    System.out.println(i); // i不可見,語法分析時報錯,即編譯不通過
    System.out.println(j); // j不可見,語法分析時報錯誤,即編譯不透過
    System.out.println(z); // z可見,輸出20
}


但若在JS


複製程式碼 程式碼如下:
for(var i=0;i}
var obj = {name:"Lily"};
for(var attr in obj) {
}
{
  var j=10;
}
alert( i);//輸出4,沒有區塊級作用域
alert(attr); //輸出name,沒有區塊級作用域
alert(j);//輸出10,沒有區塊級作用域


這也說明一個問題,避免在全域範圍內使用for循環同時宣告變量,否則會造成全域命名範圍的污染。
當然,JS1.7中提出了let關鍵字宣告變數(見https://developer.mozilla.org/cn/New_in_JavaScript_1.7),只作用於for語句範圍。


複製程式碼 程式碼如下:
for(let i=0;i   //todo
}
alert(i);//運行時弄錯,提示i未定義


JS1.7需要這樣引用
ps:firefox2 實作了JS1.7
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn