#V2EX
### [JavaScript] 发现国内很多文章对宏任务和微任务的解释都是有问题的
# 第一个澄清:任务 vs 宏任务
最近在看面试题,到了这个经典的宏任务和微任务的题目,顺手去 MDN 查了查
发现个很奇怪的问题:MDN 通篇都没有“宏任务”这个词。
在 [深入:微任务与 Javascript 运行时环境](https://developer.mozilla.org/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth) 中用的词是“任务 vs 微任务”
于是 Google 了一下“宏任务”这个词,发现中文社区中比较权威的出处应该是这篇 [事件循环:微任务和宏任务](https://zh.javascript.info/event-loop),这里标注说
> “多个任务组成了一个队列,即所谓的“宏任务队列”( v8 术语)”
但我搜索了
* [v8 文档](https://github.com/v8/v8.dev)
* [v8 源码](https://github.com/v8/v8)
* [HTML 规范](https://html.spec.whatwg.org/multipage/webappapis.html#task-queue)
都没有找到类似 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
而“同步”和“异步”则是编程和语言层面的东西,是另一个维度了,完全不该被用在解释“何为事件循环”这件事上
https://www.v2ex.com/t/1226093#reply1
