首页 新闻 会员 周边

关于在闭包中使用的this

0
悬赏园豆:10 [待解决问题]

//关于在闭包中使用的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吗?结果 就应该是一样的,所以不太理解

szchenrong的主页 szchenrong | 初学一级 | 园豆:175
提问于:2014-01-05 23:11
< >
分享
所有回答(1)
0

原因就是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了吧。

 

希望我的回答能帮到你。

沉默的老虎 | 园豆:204 (菜鸟二级) | 2014-01-06 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册