javascript - 关于闭包的一些问题
黄舟
黄舟 2017-04-11 12:15:06
[JavaScript讨论组]

如下代码,为什么最终输出的是"my object",getNameFunc:Function 这里不是闭包吗?那运行他的应该是window,所以里面的this应该是指window对象,那么that.name应该是 "the window"
吧,可为什么错了。求什么解答

var name = "the Window";
var object = {
    name: "my object",
    getNameFunc: function () {
        var that = this;
        return function () {
            return that.name;
        }
    }
}
alert(object.getNameFunc()());
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(4)
怪我咯

闭包里的this的确是window,但是你将getNameFunc里的this赋值给that,因为getNameFunc里的this是你定义的object,所以闭包里的that就是object了,所以输出"my object"。
如果将闭包里的return that.name 改为 return this.name 输出结果就是“the window”了

迷茫

最后结果分三步走,第一步把冰箱门打开,第二步把大象装进去,第三步,把冰箱门关上。哦,好像不对,应该是第一步object.getNameFunc()返回一个匿名函数,此时,因为this指向object,此刻也确实形成了闭包,把that也就是this,也就是object保存在了内存中。第二步,再次调用这个匿名函数,返回that.name也应该是object的name属性。这里,没有第三步啦。。

怪我咯

this是指向object的

PHP中文网

你已经把指向给改了,this一般是指向全局,前提是没人调用。你var that=this,相当于把这个调用权给了你的函数

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

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