浅谈js的作用域(scope)

原创
2015/01/21 17:59
阅读数 712

js的作用域和java有很大的区别;在一个java类中,类的成员变量不可能和方法新建的变量重名;js则无此问题. 总的来说,js创建对象的作用域的特点有三条: 1.每var 一次 就在当前作用域中添加一个变量 ;不var就在全局内“向上就近”覆盖变量(没有旧对象覆盖则windows作用域内新建)。

 2.覆盖的话是就近覆盖:如果被添加变量的"向上就近"作用域中有同名变量 会被覆盖掉;

3.方法执行的时候会从作用域链的右端开始查找变量(就近向上查找)        

可以firebug断点运行以下js,  以查看效果,与三条参照.

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;
  }
展开阅读全文
0
26 收藏
分享
加载中
流光韶逝博主

引用来自“苏生不惑”的评论

作用域是个坑

感觉确实要用到这东西。是坑也得填啊。
2015/01/24 09:42
回复
举报
作用域是个坑
2015/01/24 08:57
回复
举报
更多评论
打赏
2 评论
26 收藏
0
分享
返回顶部
顶部