js 宏任务 与 微任务

134 阅读1分钟

宏任务

macrotask,又称为task 每次执行  每次执行栈执行的代码就是一个宏任务 

包括:script(整个代码块),I/O,xhr,setTimeout,setInterval,setImmediate(仅Node),requestAnimationFrame(仅浏览器),UI交互事件, postMessage, MessageChannel

微任务

microtask,又称为job 当前 task 执行结束后立即执行的任务 包括:Promise.then catch finally, await后面代码,process.nextTick(仅Node),MutationObserver(仅浏览器)

当前 task  执行结束后 查看 微任务队列里有没有任务 有的话  循环队列任务  执行   执行结束后进行渲染 渲染结束继续执行 task

所以 微任务队列里的优先级 大于 事件队列里 待执行的优先级  因为事件队列的事件 (setTimeout,setInterval  等)属于task

但是  但是  已经在执行栈中的  task 不会因微任务 暂停

所以 顺序是 task =》 微任务(队列里如果有 全部执行完)=》 渲染 =》 task