javascript - 词法 this 和闭包
问题描述
我试图了解箭头函数如何传递给setTimeout
,记住this
来自先前执行上下文的值。我知道this
在执行箭头函数时使用词法范围规则查找该值。这是否意味着箭头函数关闭了变量和 this 关键字?
var obj = {
name: 'TestName',
func: function() {
console.log(this)
setTimeout(() => console.log(this), 1000)
}
}
obj.func() //{name: "TestName", func: ƒ}
解决方案
实际上,使用胖箭头表示法的全部意义在于继承父作用域。箭头函数的主要应用是下拉父作用域。当我们调用 setTimeout 时,链发生如下:
- 呼叫进入Call-Stack。
- 它被转移到Web-Browser api空间,等待到间隔时间。
- 现在间隔时间完成后,它将由Event-Loop处理,并将其传输到JS-queue。
- 命令执行将等待队列中的其他项目完成执行,然后每当它为空时,它将再次将执行流程转移到调用堆栈。
现在将执行 setTimeout 中的命令。
推荐阅读
- cordova - 无法为 Ionic 4 应用程序创建/生成 .apk 和 .ipa 文件
- vue.js - Vue-ChartJS 没有反应
- python - 当我尝试计算奇数时,为什么有“无”?
- python - Sqlachemy 的问题。看不懂区别
- nginx - 如何查看一个 pod 是否超过了它的 CPU 限制?
- python - 不知道为什么:AttributeError: 'list' object has no attribute 'groupby'
- wordpress - 更新 wordpress 插件时如何使用 sftp 而不是 ftp?
- java - Redis - 考虑重命名 bean 之一或通过设置 spring.main.allow-bean-definition-overriding=true 来启用覆盖
- excel - 获取下一个文件时,excel VBA中的过程调用或参数无效
- php - 如何在php(laravel)中将坐标转换为经纬度?