我试图了解arrow函数如何传递给setTimeout,还记得以前执行上下文中this的值。我知道在执行箭头函数时,使用词法作用域规则来查找this值。这是否意味着箭头函数会关闭变量和this关键字?

var obj = {
  name: 'TestName',
  func: function() {
    console.log(this)
    setTimeout(() => console.log(this), 1000)
  }
}

obj.func() //{name: "TestName", func: ƒ}

最佳答案

实际上,使用粗箭头符号的全部目的是继承父范围。箭头功能的主要应用是拉低父范围。
当我们调用setTimeout时,链发生如下:


呼叫进入呼叫堆栈。
它被传输到Web浏览器api空间,该空间等待直到间隔时间。
现在,在间隔时间完成之后,它将由Event-Loop处理,并将其传输到JS-queue。
命令执行将一直等到队列中的其他项完成执行,然后每当它为空时,它将再次将执行流转移到Call-Stack。
现在将执行setTimeout中的命令。

JS execution flow

10-05 20:19
查看更多