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

JavaScript异步执行顺序疑问:为何指定代码输出结果为1 3 4 2 6 5

JavaScript代码输出逻辑解释

你提供的代码输出顺序由JavaScript事件循环中同步任务优先于微任务执行、微任务按入队顺序依次执行的规则决定,具体执行步骤如下:

Promise.resolve().then(() => console.log(2));

(async() => console.log(await 6))();

console.log(1);

(async() => await console.log(3))();

Promise.resolve().then(() => console.log(5));

console.log(4);
  • 步骤1:执行第一行代码,Promise.resolve()生成已兑现的Promise,then回调属于微任务,被推入微任务队列等待执行,此时微任务队列:[() => console.log(2)]
  • 步骤2:执行第二行的立即调用async函数,遇到await 6时,会先将6封装为已兑现的Promise,await会暂停当前async函数的执行,将剩余逻辑console.log(6)作为微任务推入队列,此时微任务队列:[() => console.log(2), () => console.log(6)]
  • 步骤3:执行第三行同步代码console.log(1),直接输出1
  • 步骤4:执行第四行的立即调用async函数,await后的表达式console.log(3)会先同步求值,直接输出3,后续无需要执行的代码,无新增可输出的微任务
  • 步骤5:执行第五行代码,then回调被推入微任务队列,此时微任务队列:[() => console.log(2), () => console.log(6), () => console.log(5)]
  • 步骤6:执行第六行同步代码console.log(4),直接输出4
  • 步骤7:所有同步任务执行完毕,按入队顺序依次执行微任务队列中的回调,依次输出2、6、5

最终输出顺序为1 3 4 2 6 5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:00:03