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