宏任务
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