【发布时间】:2020-05-20 06:24:48
【问题描述】:
在发出类似计时器 (serTimeout) 的 Web API 请求时,我没有了解闭包变量如何附加到函数 ([[Scope]])。
function fun() {
function log() {console.log(callme) };
console.dir(log);
setTimeout( log, 10000);
const callme = "hi iam"
}
fun()
当 const 没有被提升时,函数 log 可以访问变量 callme。
我的想法是 fun() 被调用,它被推送到调用堆栈,函数 log 然后被发送到 WebAPI 计时器函数,同时 fun 运行并在其执行上下文中设置 callme 变量。一旦 Timer 结束,fn log 被推送到回调队列,事件循环在检查调用堆栈是否为空后将 log 推送到调用堆栈执行。当 callme 附加到函数 log
的闭包 [[Scope]] 时,我无法理解【问题讨论】:
-
[[Scope]]只是对父函数执行上下文的引用。正如你所说,callme 被添加到它(它也被提升,只是不同)
标签: javascript closures