我试图了解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