javasript宿主环境有事件循环,异步任务会被加入到任务队列,任务队列分为两种,宏任务(macroTask)和微任务(microTask)。
宏任务队列会有多个,微任务队列只有一个。
每次事件循环,先执行微任务队列,执行完后,会选择一个宏任务队列执行,然后再次执行微任务队列,完成后再挑一个宏任务队列执行..
总之,就是 microTask queue -> macroTask queue -> microTask queue -> macroTask queue ....
结果是,微任务会先于宏任务执行。
Microtasks: process.nextTick promise Object.observe MutationObserver Macrotasks: setTimeout setInterval setImmediate script(全局任务) I/O(例如ajax) UI渲染
优先级:process.nextTick > promise , setImmediate > setTimeout
速记:微任务,所有p开头的和观察的;宏任务,所有set开头的,以及大块操作,例如script标签,IO,UI渲染
原文地址:https://www.cnblogs.com/mengff/p/11739189.html
时间: 2024-11-09 00:34:08