setTimeout 是否添加到调用堆栈中?

j o*_*obe 6 javascript

我一直在学习setTimeout同步与异步代码,我正在观看一个教程视频,其中展示了正在调用的各种函数并将其添加到调用堆栈中,例如简单地添加 2 个数字的函数。

然而,因为setTimeout他们没有表明,当调用它时,它被添加到调用堆栈中,我知道这会启动一个 Web API,并且回调会被添加到队列中,但我很好奇此时是否setTimeoutJS引擎正在执行,是否添加到调用栈中?

tri*_*cot 7

setTimeout在JS引擎执行的那一刻,它是否被添加到调用堆栈中?

这是。一旦注册了回调,它就会从调用堆栈中弹出,因此这几乎不需要任何时间。

当给定的延迟过去后,回调将排队。然后当调用栈为空时,JS会处理事件队列,并调用回调。此回调还将添加到调用堆栈中。

请注意setTimeout,回调不会添加到累积调用堆栈中。确保在将回调推送到调用堆栈之前先清空调用堆栈。