You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何3个setTimeout宏任务会同时执行?

关于setTimeout宏任务与执行时机的疑问解答

首先明确:setTimeout确实属于宏任务。

你提到事件循环一个tick只执行一个宏任务,这点没错,但三个回调看起来几乎同时执行的原因在于:

  • 当你连续调用这三个setTimeout时,它们的延迟计时是同时启动的,都是从当前代码执行到对应行的时间点开始算1000ms,不是等前一个回调执行完才开始计时。
  • 1000ms后,这三个回调会被依次加入宏任务队列。
  • 主线程空闲时,事件循环会逐个取出队列里的宏任务执行——因为这三个任务进入队列的时间差极小,执行它们的几个tick几乎是连续发生的,所以看起来像是在同一个周期内完成,但实际上每个回调都是在单独的tick里执行的。

你可以做个简单验证:如果把第三个setTimeout的延迟改成2000ms,就会看到前两个在1000ms后输出,第三个要再过1000ms才输出,这就能直观体现出它们的计时是独立的。

内容的提问来源于stack exchange,提问作者AlxCtchr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:52:03