一个有关js的this和闭包相关的问题
首先这个题是我自己学习闭包以及上下文,作用域等概念的时候琢磨出来的,主要是对第二个this不太理解:
var obj = {
fn1:function(){
console.log(this);
var that = this;
var f=function(){
console.log(that);
console.log(this);
};
return f;
}
};
obj.fn1()();
第一个this和后面的that我基本能理解了,但是最后一个this是window我不太明白,按照对闭包的理解,这个this不是应该和that是相同的吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先,感谢邀请!
这个是对 this 指向的基本理解相关问题,而且难度不大。
解答:
obj.fn1()
属于隐式调用,其中的this
指向其上下文obj
obj.fn1()()
执行相当于f()
。由于闭包,其中that
指向其上一级词法作用域this
,即obj
f()
的执行中,属于独立函数执行,默认绑定window
建议参考文章《你不知道的javascript》笔记_this 系统学习一下,相关的问题基本上都能理解了
函数内部的this关键字指向于谁调用了这个函数,第一个调用是obj.f1(),那么第一个this就是指向obj,第二次调用是是第一返回的函数即f()调用,相当于window.f()此时函数是window调用的,那么第二个this自然就指向window
最后一个 this 是 obj.fn1() 返回的,可以理解为 f = obj.fn1(),所以就是 f(),自然就是 window 对象了,因为 f() 等价于 window.f()