
异步任务分为 宏任务(macrotask) 与 微任务 (microtask),不同的API注册的任务会依次进入自身对应的队列中,然后等待 Event Loop 将它们依次压入执行栈中执行。
宏任务(macrotask):script(整体代码)、setTimeout、setInterval、UI 渲染、 I/O、postMessage、 MessageChannel、setImmediate(Node.js 环境)微任务(microtask):Promise、 MutaionObserver、process.nextTick(Node.js环境) Event Loop(事件循环):Event Loop(事件循环)中,每一次循环称为 tick, 每一次tick的任务如下:
执行栈选择最先进入队列的宏任务(通常是script整体代码),如果有则执行检查是否存在 微任务 (microtask),如果存在则不停的执行,直至清空 微任务 (microtask) 队列更新render(每一次事件循环,浏览器都可能会去更新渲染)重复以上步骤形成循环宏任务 > 所有微任务 > 宏任务 代码实例setTimeout(function () {
console.log(1);
});
new Promise(function (resolve, reject) {
console.log(2)
resolve(3)
}).then(function (val) {
console.log(val);
})
console.log(4);
执行讲解
先执行script同步代码:执行new Promise中的console.log(2),then后面的不执行属于微任务然后执行console.log(4)执行完script宏任务后,执行微任务,console.log(3),没有其他微任务了执行另一个宏任务,定时器,console.log(1)结果:2=>4=>3=>1
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)