//关于在闭包中使用的this
//part 1
var name="the Windowm";
var object={
name:"the object",
getNameFun:function(){
return function(){
return this.name;
};
}
};
//part 2
var name="the Windowm";
var object={
name:"the object",
getNameFun:function(){
var that=this;
return function(){
return that.name;
};
}
};
alert(object.getNameFun()());
part1结果是the window,part2结果是the object,part2的that不是指当前的window吗,如果是的话,that不就是window吗?结果 就应该是一样的,所以不太理解
原因就是getNameFun这个函数里面的this和这个函数返回的匿名函数里面的this是不一样的。
你执行这段代码试试:
var name="the Windowm"; var object={ name:"the object", getNameFun:function(){ alert(this); return function(){ alert(this); }; } }; object.getNameFun()();
你会看到,两次alert,第一个是getNameFun里面的alert,第二个才是匿名函数里面的。
第一个很好理解吧,在函数内部的this就是这个函数所属对象的实例,也就是object。
第二个呢,getNameFun()()这种写法其实换个写法就是:
var f = getNameFun(); f();
这样也就不难理解为什么在执行匿名函数的时候this指向的是window了吧。
希望我的回答能帮到你。