宏任务微任务主要体现在与定时器(setTimeout,setInterval),异步函数 async 等同时存在时其执行顺序。
JS 的循环执行机制是先执行宏任务,再执行微任务。然后执行第二个宏任务,微任务。第三个宏任务,微任务......以此循环。
如果宏任务中有微任务,则先执行宏任务,再执行宏任务中的微任务,最后执行第二个宏任务。
如果宏任务中有宏任务,则先执行宏任务,再执行第二个宏任务,最后执行宏任务中的宏任务。
如果微任务中有宏任务,则先执行微任务,再执行第二个宏任务,最后执行微任务中的宏任务。
如果微任务中有微任务,则先执行微任务,再执行微任务中的微任务,再执行第二个宏任务,最后执行微任务中的宏任务。
宏任务有:script、setTimeout\setInterval 定时器等。
微任务有:Promise 中的 then 方法、async 函数等。
注:以上定时器的宏任务是基于执行时间相同的情况下。如果时间不同,时间最长的始终最后执行。