一个jd闭包的常用例子

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)
原文地址:https://www.cnblogs.com/tudou1223/p/4991955.html