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; }