首页 > 解决方案 > “this”指的是在方法内部定义的 IIFE 内部定义的内部箭头函数?

问题描述

我的理解是箭头函数不会重新绑定this,那么为什么它会根据调用方式来引用不同的对象呢?

const foo = {
  speak() {
    (() => {
      console.log(this);
    })();
  }
};

foo.speak(); // Logs foo

const speak = foo.speak;

speak(); // Logs the global object

感谢您的时间!

标签: javascriptecmascript-6thisarrow-functions

解决方案


箭头函数保留 的词法值this。这意味着, 的值this取决于箭头函数的定义方式,而不是箭头函数的调用方式。

您在此处看到的不一致行为是因为每次speak调用函数时都会“定义”内部箭头函数。在那个定义点上,箭头函数捕获与和this不同的当前值。foo.speak()speak()

作为旁注,这似乎是 JavaScript 琐事。我不希望“真正的”代码库有这种片段。


推荐阅读