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

异步代码执行顺序疑问:为何console.log(2)先于'after start'输出?

为什么console.log(2)比after start先输出?

核心原因是JavaScript的事件循环规则,结合async/await的执行逻辑,具体过程如下:

  • 代码从顶部开始同步执行,先运行console.log(1),输出1。
  • 接着执行立即调用的异步箭头函数,里面的同步代码优先执行:先输出before start,然后调用start(),start会触发myfunction的执行。
  • myfunction是async函数,调用它时会先同步执行内部的console.log('Inside of myfunction'),输出这句话,随后返回一个已完成状态的Promise。
  • 碰到await start()时,JS会把await后面的console.log('after start')放到微任务队列中暂不执行,同时将控制权交回主代码栈。
  • 主代码栈里还有未执行的同步代码console.log(2),于是直接执行它,输出2。
  • 等所有同步代码执行完毕、主栈清空后,事件循环才会处理微任务队列里的任务,这时候才会执行console.log('after start')。

简单来说:await会把后续代码延后到微任务阶段执行,而同步代码的执行优先级高于微任务,所以2比after start先输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:34:57