Javascript 變量作用域

作者: snandy  來源: 博客園  發布時間: 2011-03-06 21:40  閱讀: 1974 次  推薦: 0   原文鏈接   [收藏]  

  變量的作用域指的是變量的可見性,而生命周期則(存活期)則是從另一個角度考察變量。
  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(String... args) {
  
for(int i=0;i<5;i++) {
  }
{

int j=10;
}

int z = 20;
System.out.println(i);
// i不可見,語法分析時報錯,即編譯不通過
System.out.println(j); // j不可見,語法分析時報錯,即編譯不通過
System.out.println(z); // z可見,輸出20
}

  但如果在JS:

 
for(var i=0;i<5;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<5;i++) {
//todo
}
alert(i);
//運行時報錯,提示i未定義

  JS1.7需要這樣引用 <script type="application/javascript;version=1.7"/></script> 
  ps:firefox2+實現了JS1.7

  相關:變量的六個屬性

0
0
 
標簽:Javascript
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()