javascript - JS中一个闭包问题。不理解最后的输出结果。
怪我咯
怪我咯 2017-04-11 10:10:29
[JavaScript讨论组]
  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'呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
ringa_lee

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

PHP中文网

这个是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()()); 
阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号