首页 > 关于闭包的一些问题

关于闭包的一些问题

如下代码,为什么最终输出的是"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()());

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


闭包里的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的

【热门文章】
【热门文章】