1
yyzcl 2021-03-14 00:33:33 +08:00
|
2
jinliming2 2021-03-14 00:53:38 +08:00 3
本身顺序就是 宏-微-宏-微-宏-微-宏-微 这样交替着来的。入口肯定是宏任务,然后在入口代码中有创建微任务和宏任务的代码,入口代码执行完之后,立即执行微任务,然后再取队列里的下一个宏任务。
其实是一样的,描述的起点不同罢了。 国内说先执行微任务,再执行宏任务,这是相对于当前宏任务执行完毕之后这一个时刻来说的,当前宏任务执行完毕之后,会先清空微任务,再去执行下一个宏任务。所以是“先微任务,再宏任务”。 而你复制的这段描述的是,一个宏任务+一个微任务组成“一对”,这是相对于整个流程开头来说的,执行完一个宏任务后立即再去清空微任务,这样完成一套事件的过程。所以是“先宏任务,再微任务”。 两种说法都没问题,你要说哪个描述更准确,那我更偏向于“宏+微是一体”的“先宏后微”的描述,毕竟“先微后宏”的描述要强调是在当前宏任务执行完这个时间点。 |
3
autoxbc 2021-03-14 01:08:09 +08:00 1
宏任务容易有歧义,不如换成宏任务和宏队列
|
4
weimo383 OP @jinliming2 谢谢大佬解释!仔细想想<script>标签解析确实是最开始的宏任务接着会立即执行微任务
|
7
codehz 2021-03-14 01:26:17 +08:00
浏览器和 nodejs 的有一点点小区别,建议还是别依赖这个顺序写东西好(
|
8
Sparetire 2021-03-14 01:40:55 +08:00 via Android
看节点是 nodejs,那就不是浏览器了,那严格来讲不存在宏任务微任务这个概念,只看事件循环的几个阶段就完事了
|
9
leelz 2021-03-14 08:47:47 +08:00
没有整体 script(宏任务)先执行哪来的微任务
|
10
Biwood 2021-03-14 11:28:12 +08:00 via iPhone
微任务是后来的概念,属于向事件轮询的每一个 Tick 末尾插入的 jobs 。
别忘了每个 JavaScript 代码块的执行本身就是宏任务,微任务是在执行宏任务时被插入到队列的。 与其简单回答先后问题,不如了解一下整个运行机制。参考: https://developer.mozilla.org/zh-CN/docs/Web/API/HTML_DOM_API/Microtask_guide#%E4%BB%BB%E5%8A%A1_vs_%E5%BE%AE%E4%BB%BB%E5%8A%A1 https://www.yuque.com/ostwind/you-dont-know-js/async-performance-ch1#Jobs |
11
himself65 2021-03-20 01:43:03 +08:00 via iPad
|