JavaScript 中的微任务和宏任务是两种不同的任务队列。
- 宏任务是由浏览器提供的任务队列,包括但不限于 setTimeout、setInterval、setImmediate、I/O、UI 渲染等等。
- 微任务是由 JavaScript 引擎提供的任务队列,包括但不限于 Promise、MutationObserver 等等。
- 在 JavaScript 引擎执行完当前宏任务后,会立即执行所有微任务队列中的任务。
- 在执行微任务队列中的任务时,可能会产生新的微任务,这些新的微任务会被添加到当前微任务队列的末尾,直到队列为空为止。
- 当前微任务队列为空后,JavaScript 引擎会去宏任务队列中取出一个任务执行,然后再执行所有微任务,如此往复,直到宏任务队列和微任务队列都为空。