一个有关js的this和闭包相关的问题

发布于 2022-09-11 18:27:22 字数 372 浏览 16 评论 0

首先这个题是我自己学习闭包以及上下文,作用域等概念的时候琢磨出来的,主要是对第二个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风启觞 2022-09-18 18:27:24

首先,感谢邀请!

这个是对 this 指向的基本理解相关问题,而且难度不大。

解答:

  1. obj.fn1()属于隐式调用,其中的this指向其上下文obj
  2. obj.fn1()()执行相当于f()。由于闭包,其中that指向其上一级词法作用域this,即obj
  3. 紧接着上一步骤。f()的执行中,属于独立函数执行,默认绑定window

建议参考文章《你不知道的javascript》笔记_this 系统学习一下,相关的问题基本上都能理解了

仄言 2022-09-18 18:27:24

函数内部的this关键字指向于谁调用了这个函数,第一个调用是obj.f1(),那么第一个this就是指向obj,第二次调用是是第一返回的函数即f()调用,相当于window.f()此时函数是window调用的,那么第二个this自然就指向window

素手挽清风 2022-09-18 18:27:22

最后一个 this 是 obj.fn1() 返回的,可以理解为 f = obj.fn1(),所以就是 f(),自然就是 window 对象了,因为 f() 等价于 window.f()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文