var name="the window";
      var obj={
          name:"my window",
          getName:function(){
              return function(){
                  return this.name;
              }
          }
      }
      alert(obj.getName()())//the window
      //等价于
      alert(this.name)

这里之所以打印the window是因为闭包的执行环境具有全局性。因为内部函数在搜索this时,只会搜索其活动对象,然而闭包没有被其他对象调用,所以其this具有全局性,所以里面的this 等于window。

解决办法:

var name="the window";
      var obj={
          name:"my window",
          getName:function(){
              var that = this;        
              return function(){
                  return that.name;
              }
          }
      }
      alert(obj.getName()())//the window
      //等价于
      alert(this.name)

 

posted on 2015-11-24 16:14  沉默的土豆  阅读(186)  评论(0编辑  收藏  举报