1、微任务与宏任务分类
微任务
- promise
- process.nextTick
- MutationObserver
宏任务
- setTimeout
- setInterval
- I/O
这里只是列举了一些常见的方法,还有部分未列举在内(MutationObserver被列举在里面的原因是因为我第一眼看到他的时候竟然不知道这是个什么东西…)
2、执行顺序
- 主线程任务循环执行直至完毕
- 微任务列表循环执行直至完毕
- 宏任务列表为空则返回1,否则取出第一个任务执行完毕后跳转至2继续执行
由于宏任务与微任务是队列的形式,我们模拟下执行的顺序
let microTask = []; // 微任务
let macroTask = []; // 宏任务
let main = () => {
}; // 模拟主线程任务
let doMicroTask = () => {
while(microTask.length > 0) {
let task = microTask.shift(); // 取出队首执行
task(); // 执行微任务
}
};
let doMacroTask = () => {
while(macroTask.length > 0)