首页 > JS中一个闭包问题。不理解最后的输出结果。

JS中一个闭包问题。不理解最后的输出结果。

  var name = "The Window";   
  var object = {   
    name : "My Object",   
    getNameFunc : function(){   
      return function(){   
        return this.name;   
     };   
    }   
};   
alert(object.getNameFunc()()); 

此处的getNameFunc()是作为object对象的一个方法被调用的对吗?
如果是的话,那么this即被绑定到了object对象了的是吧?
那么为什么return this.name时,输出全局变量'The Window'而不是object中的name属性值'My Object'呢?


这不应该算是闭包问题,而是this的指向问题……
每个函数(含嵌套函数)都有自己的this和arguments,内函数的this和arguments不等于外函数的this和arguments,这在犀牛书函数一章有讲,至于为什么没说……
内部函数引用外部的this,需要在外部函数中设置局部变量,如self=this,arguments相同……利用闭包,内部函数可以调用外部函数的变量而获取外部函数的调用对象this
内部函数的this就是全局变量window,在严格模式下好像是undefined


这是 js 设计的一个问题。this会查找到上一层函数作用域。在es5里, 如果未能在上一层作用域查找到,则会去全局作用域查找


这个是this指向有问题了,这个this指向的是匿名函数返回值
改成

var name = "The Window";   
          var object = {   
            name : "My Object",   
            getNameFunc : function(){  
                var _this = this;
              return function(){   
                return _this.name;   
             };   
            }   
        };   
        alert(object.getNameFunc()()); 

      var name = "The Window";   
          var object = {   
            name : "My Object",   
            getNameFunc : function(){  
              return function(){   
                return this.name;   
                 }.bind(this);   
            }   
        };   
        alert(object.getNameFunc()()); 
【热门文章】
【热门文章】