setTimeout内部函数的范围

时间:2019-05-06 07:48:38

标签: javascript ecmascript-6

我知道有很多博客和示例可以解释this关键字在不同情况下的概念,并且越来越多的阅读使我感到困惑。

在下面的示例中,两个setTimeout调用的输出是相同的,但是我肯定不是出于相同的原因

function x() {
  setTimeout(() => {
    console.log(this)
  }, 100);

  setTimeout(function() {
    console.log(this)
  }, 200);
}
x(); //logs window object twice

我知道

  1. arrow函数继承了词法作用域,即定义父对象的作用域
  2. 常规函数的作用域是从调用它的作用域而不是定义它的作用域得到的。
  3. 运行setTimeout()函数的上下文始终是窗口。

能否请您解释一下为什么两者都记录window对象,如果我的理解是错误的,请纠正我。

0 个答案:

没有答案