淺談js的做用域(scope)

js的做用域和java有很大的區別;在一個java類中,類的成員變量不可能和方法新建的變量重名;js則無此問題. 總的來講,js建立對象的做用域的特色有三條: 1.每var 一次 就在當前做用域中添加一個變量 ;不var就在全局內「向上就近」覆蓋變量(沒有舊對象覆蓋則windows做用域內新建)。java

 2.覆蓋的話是就近覆蓋:若是被添加變量的"向上就近"做用域中有同名變量 會被覆蓋掉;windows

3.方法執行的時候會從做用域鏈的右端開始查找變量(就近向上查找)        函數

能夠firebug斷點運行如下js,  以查看效果,與三條參照.code

var a=2;
  var foo=function(){
   var a=3,b=5;
   var  bar = function(){
   var b = 7,c=11;//var b,則b爲bar內的新變量,
   a+=b+c;//執行完a爲21,就近向上覆蓋到了foo函數內的a;
   }
    bar();
  }//foo函數結束時,foo函數內的a爲21,b爲5;而頁面(全局)變量a仍爲2;
  function soo(){
   a = 12;
  } //執行完頁面變量a=12,就近覆蓋全局變量a;
  function  new(){
   b = 15;//向上做用域無變量b,則新建全局變量b=15;
  }
相關文章
相關標籤/搜索