宏任务(macro-task)和微任务(micro-task)在事件循环中的执行顺序如下:
- 当执行脚本开始时,会先执行一个宏任务(通常是脚本本身)。
- 执行完当前宏任务后,检查微任务队列。
- 如果微任务队列不为空,则按照先进先出的顺序依次执行所有微任务,直到微任务队列为空。这意味着微任务会在下一个宏任务之前执行。
- 当前宏任务执行完毕后,浏览器会渲染页面更新UI。
- 检查是否有新的宏任务进入事件队列。如果有,则选择最早进入队列的宏任务,并执行它。如果队列为空,则继续等待新的宏任务进入队列。
- 重复步骤2-5,循环执行宏任务和微任务。
简而言之,微任务会在当前宏任务执行完毕后立即执行,而宏任务则需要等待当前宏任务执行完毕后,再从宏任务队列中选择下一个宏任务执行。
注意:在某些情况下,宏任务执行期间可能会产生新的微任务,这些新的微任务会被添加到微任务队列中,并在当前宏任务执行完毕后立即执行。这意味着微任务可能会被插入到宏任务之间执行。这种情况下,微任务优先级高于宏任务。