JavaScript中宏任务和微任务有什么区别?快速掌握!

3 min read

JavaScript事件循环(Event Loop)中存在两个不同的任务队列——宏任务队列和微任务队列。

宏任务(MacroTask)是一些比较重的任务,比如script整体代码、setTimeout、setInterval、setImmediate、I/O操作等,它们会被推到宏任务队列中等待执行。

微任务(MicroTask)是一些比较轻量的任务,比如Promise里的then或catch、process.nextTick、MutationObserver等,它们会被推到微任务队列中等待执行。

第一次进入事件循环时,事件循环会先按照顺序执行所有的宏任务,再执行所有微任务。

在执行过程中,产生的微任务还会继续添加到微任务队列的末尾。当宏任务执行完毕后,就会取出微任务队列中的所有任务,按照顺序执行。这个过程会一直重复下去,直到所有的任务都被执行完毕。

总体来说,区分宏任务和微任务是为了控制任务执行的优先级和顺序。宏任务的优先级比微任务要低,当宏任务和微任务都存在时,会先执行微任务。