突然在帖子里看到宏任务和微任务,以前没见过. 就探寻了一下. Microtask起源于ES6的Promise, 不是jQuery的Promise . 因为经常会用到Promise,所以有必要了解执行时序(毕竟不是多线程,时序纯粹是Javascript引擎的消息循环中按照规范定义的).
Microtask 就是 PromiseJob
所谓微任务就是Promise的各种回调函数, 有人说Dom的修改也属此类,但是和我们写代码可能没关系,也没看到资料.
ES6引入Promise对象解决异步问题,同时也引入了一类新的PendingJobs (PromiseJobs), 注册到一个内部队列去(internal queue), 然后在脚本执行的间隙(传统的消息循环的Idle时段)一次性执行到清空这个内部队列(这里的小例子简明的说明了时序的规定). 而目前我们所知道的可能经由我们的代码产生的Microtask, 几乎都来自Promise(还有一个queueMicrotask函数, 直接操作队列,这个算特殊用法.).
摘录最主要的一段文字如下.
参考链接: ecma262/#sec-jobs-and-job-queues
其他
其他就是Macrotask就是当前执行的脚本, 同步运行的代码这部分(包括setTimeOut注册的回调和各种UI事件响应), 为了说明Microtask吧.