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