【发布时间】:2020-04-01 19:53:13
【问题描述】:
我对 settimeout 完成后将什么放入回调队列中是否放入函数名称/函数定义(我们作为参数传递给 settimeout)或调用的函数感到困惑
function cb(){
console.log("Hi!")
}
setTimeout(cb,2000) // what will be put on the callback queue after 2 sec cb or cb()
所以现在如果我打电话给setTimeout(cb,2000) 之后它将在回拨队列中放入cb or cb()
如果我假设它只像那样放置 cb,并且当事件循环将 cb 放入调用堆栈时,它将执行 cb 函数 所以如果是这样的话,那么如果我有:
function cb(num){
console.log(num);
console.log("Hi!")
}
并调用setTimeout(cb,2000,5),因此对于这种情况,在计时器完成后并且如果它只将 cb 放入回调队列中,那么当事件循环将 cb 放入调用堆栈时,它如何记住或传递 num 参数(在这种情况下为值 5),因为它将 5 记录到控制台。
非常感谢任何帮助,因为我无法为这种混乱设置心智模型。
【问题讨论】:
-
向我们展示完整的代码
-
这与代码无关,我想知道 web api 在回调队列中放置了什么,它是否放置了回调函数定义(我们传递给 setTimeout 的参数或回调)或确实而是回调队列中调用的回调函数
-
setTimeout(cb,2000)。调用setTimeout时cb指向的函数地址。该地址的内存包含cb函数的字节码
标签: javascript event-loop webapi