news 2026/9/3 1:01:33

从执行顺序彻底搞懂 JavaScript 的同步、微任务与宏任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从执行顺序彻底搞懂 JavaScript 的同步、微任务与宏任务

最近在复习 JavaScript 的过程中,我遇到稍微复杂一点的执行顺序题,就开始靠“感觉”判断。我尝试用一段代码,把 JavaScript 的执行顺序一次性讲清楚。

一段代码

asyncfunctionasync1(){console.log('async1')awaitasync2()console.log('async1 end')}asyncfunctionasync2(){console.log('async2')}console.log('script start')setTimeout(()=>{console.log('setTimeout')},0)async1()newPromise((resolve)=>{console.log('promise')resolve()}).then(()=>{console.log('promise then')})console.log('script end')//执行顺序script start async1 async2 promise script end async1 end promise then setTimeout

JavaScript 执行顺序的核心规则

在分析之前,先记住这 4 条规则:

1️⃣ JavaScript 是单线程的

同一时间只做一件事。

2️⃣ 同步代码优先执行

所有同步代码直接进入调用栈(Call Stack)。

3️⃣ 微任务优先于宏任务

每一轮事件循环中:

先清空所有微任务,再执行一个宏任务

4️⃣ async / await 的本质是 Promise

awaitfn()

等价于:

Promise.resolve(fn()).then(()=>{// await 后的代码})

逐步拆解执行过程

① 执行同步代码(主线程)

console.log('script start')

输出:

script start

② 注册 setTimeout(宏任务)

setTimeout(()=>{console.log('setTimeout')},0)

这里只是注册,不会立刻执行。

setTimeout 是宏任务(Macro Task),JavaScript 的执行环境中有 调用栈 + 任务队列,setTimeout注册的回调会进入 宏任务队列,等待当前同步代码和所有微任务执行完,0 毫秒只是最短延迟,不是立即执行。浏览器有最小时间限制(HTML5标准规定至少 4ms),Node.js 也会将其加入事件循环的下一个 tick所以 setTimeout(fn, 0) 表示:“尽快在当前事件循环结束后执行 fn”,但绝不是同步立即执行。

③ 执行 async1()

console.log('async1')

输出:

async1

④ 遇到 await async2()

console.log('async2')

输出:

async2

注意:

  • async2()本身是同步执行的
  • await后面的代码被放入微任务队列

⑤ Promise 构造函数是同步的

console.log('promise')

输出:

promise

⚠️ 很多人误以为 Promise “一创建就是异步”,这是常见误区。

⑥ 继续执行同步代码

console.log('script end')

输出:

script end

开始清空微任务队列

此时微任务队列中有两个任务:

  1. await后的async1 end
  2. promise.then

按进入顺序执行:

console.log('async1 end')
console.log('promise then')

输出:

async1 end promise then

最后执行宏任务

console.log('setTimeout')

输出:

setTimeout

一张执行顺序模型表

同步代码 ↓ 微任务(全部清空) ↓ 宏任务(执行一个) ↓ 微任务(再清空) ↓ 下一轮事件循环
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:14:03

AI生成内容检测:如何快速搭建真假图像识别系统

AI生成内容检测:如何快速搭建真假图像识别系统 随着AI生成图像技术的快速发展,媒体机构面临着如何辨别真假新闻图片的挑战。本文将介绍如何利用预置镜像快速搭建一套AI生成内容检测系统,帮助媒体从业者轻松识别AI生成的新闻图片。 为什么需要…

作者头像 李华
网站建设 2026/9/3 0:00:33

吐血推荐!研究生AI论文网站TOP10:开题报告/文献综述全搞定

吐血推荐!研究生AI论文网站TOP10:开题报告/文献综述全搞定 学术写作工具测评:为何需要这份2026年榜单? 在研究生阶段,论文写作不仅是学术能力的体现,更是时间与精力的挑战。从开题报告到文献综述&#xff0…

作者头像 李华
网站建设 2026/9/2 20:41:28

5分钟玩转AI绘画:阿里通义Z-Image-Turbo WebUI零配置入门指南

5分钟玩转AI绘画:阿里通义Z-Image-Turbo WebUI零配置入门指南 作为一名自媒体博主,我经常需要为文章配图,但传统的图片素材库往往难以满足个性化需求。最近尝试用AI生成图片时,却被本地安装Stable Diffusion的复杂依赖和CUDA配置劝…

作者头像 李华
网站建设 2026/9/2 21:10:07

Z-Image-Turbo模型解释:快速搭建可视化分析环境

Z-Image-Turbo模型解释:快速搭建可视化分析环境 作为一名经常需要分析AI模型决策过程的研究人员,我最近在探索Z-Image-Turbo这个高效的图像生成模型时,遇到了一个典型问题:如何快速搭建一个可视化分析环境来理解模型的内部工作机制…

作者头像 李华
网站建设 2026/9/2 20:41:05

Synbo 被币安广场、Bitget 广场、HTX 广场、OKX 星球同时邀请入驻

在全球加密交流平台,建立属于去中心化资本的共同话语权在 2026 年的加密世界,一个肉眼可见的变化正在发生。市场不再缺少项目,不再缺少概念,也不再缺少高频的信息流。真正稀缺的,是能够被持续讨论、被反复验证、被长期…

作者头像 李华
网站建设 2026/9/2 21:27:22

M2FP模型在智能监控中的人体行为分析

M2FP模型在智能监控中的人体行为分析 📌 引言:智能监控中的精细化人体理解需求 随着城市安防、智慧零售和公共安全管理的不断升级,传统的目标检测与动作识别已难以满足对复杂场景下细粒度人体行为分析的需求。在多人密集、遮挡严重或光照变化…

作者头像 李华