首页 > 解决方案 > 词法 this 和闭包

问题描述

我试图了解箭头函数如何传递给setTimeout,记住this来自先前执行上下文的值。我知道this在执行箭头函数时使用词法范围规则查找该值。这是否意味着箭头函数关闭了变量和 this 关键字?

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

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

标签: javascriptclosuresthis

解决方案


实际上,使用胖箭头表示法的全部意义在于继承父作用域。箭头函数的主要应用是下拉父作用域。当我们调用 setTimeout 时,链发生如下:

  1. 呼叫进入Call-Stack
  2. 它被转移到Web-Browser api空间,等待到间隔时间。
  3. 现在间隔时间完成后,它将由Event-Loop处理,并将其传输到JS-queue
  4. 命令执行将等待队列中的其他项目完成执行,然后每当它为空时,它将再次将执行流程转移到调用堆栈。
  5. 现在将执行 setTimeout 中的命令。

    JS执行流程


推荐阅读