查看: 7|回复: 2

发现国内很多文章对宏任务和微任务的解释都是有问题的

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2026-7-9 14:26:09 | 显示全部楼层 |阅读模式
第一个澄清:任务 vs 宏任务

最近在看面试题,到了这个经典的宏任务和微任务的题目,顺手去 MDN 查了查

发现个很奇怪的问题:MDN 通篇都没有“宏任务”这个词。

深入:微任务与 Javascript 运行时环境 中用的词是“任务 vs 微任务”

于是 Google 了一下“宏任务”这个词,发现中文社区中比较权威的出处应该是这篇 事件循环:微任务和宏任务,这里标注说

“多个任务组成了一个队列,即所谓的“宏任务队列”( v8 术语)”

但我搜索了

v8 文档

v8 源码

HTML 规范

都没有找到类似 macrotask 的表述

所以这个“宏任务”的说法是哪来的?用 ai deepresearch 了一下,找到的出处为:

https://lists.w3.org/Archives/Public/public-nextweb/2013Jul/0018.html

https://github.com/YuzuJS/setImmediate/blob/master/README.md

所以“宏任务”的说法,本身只是社区中为了区分与“微任务”产生的。

那么 MDN 中的 “任务” 其实就是我们说的 “宏任务” 了

第二个澄清:同步/异步任务 vs 宏/微任务

很多文章做了类似这样的分类:

JS 代码分两种:同步任务和异步任务,异步任务又分为宏任务和微任务

这其实是把同步/异步任务和宏/微任务,混淆了

MDN 和 Html 规范中关于事件循环的章节,是找不到这种分类的依据的,或者说,根本就没有同步任务和异步任务的概念。

发明“宏任务”这个词是为了区分 task 和 microtask 的话,还可以理解

但把“同步任务”和“异步任务”用在理解事件循环这个概念时,就不太合适了,只会让人越来越乱

事件循环是 JS 能实现同步/异步编程的底层原理,在事件循环这一层只分 task 和 microtask

而“同步”和“异步”则是编程和语言层面的东西,是另一个维度了,完全不该被用在解释“何为事件循环”这件事上
回复

使用道具 举报

0

主题

4

回帖

8

积分

新手上路

积分
8
发表于 2026-7-9 14:52:48 | 显示全部楼层
我学了几年前端,没有看过讲宏任务和微任务的书(比如红宝书),一些经典书,也没有这些。但是面试的时候老是问。后面发现一些自媒体和培训机构和一些杂书(比如忍者秘籍)有讲宏任务和微任务。虽然这个确实是有区别的,我觉得其实就是单独为 promise 开了个任务类型(说是微任务也不对,更像是同步调用了一个延后的任务)。对于 web api ,也就是把更新 dom 的动作放到了适当的位置(也就是所谓的微任务,实际是强行往任务队列中两个任务间插入的,用于操作 dom 的任务)

所以,其实宏任务和微任务,应该是借用的概念,被自媒体和培训机构发扬光大了
回复

使用道具 举报

0

主题

1

回帖

2

积分

新手上路

积分
2
发表于 2026-7-9 15:59:13 | 显示全部楼层
同步/异步和事件循环/微任务是两个层面的概念,前者是如何组织程序结构的,后者是运行时如何实现并发的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
返回顶部