萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> Javascript變量作用域詳解

Javascript變量作用域詳解

         這篇文章主要是對Javascript變量作用域進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助 變量的作用域指的是變量的可見性,而生命周期則(存活期)則是從另一個角度考察變量。         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  
copyright © 萬盛學電腦網 all rights reserved