>[danger]列举你知道的微任务和宏任务有哪些?process.nextTick是什么时候执行的? 常见的微任务包括: 1. Promise 的回调:`then()`、`catch()`、`finally()`等方法中的回调函数都是微任务。 2. MutationObserver 的回调:用于监视 DOM 变动的回调函数。 3. Object.observe 的回调:用于监视对象变动的回调函数(已废弃)。 常见的宏任务包括: 1. setTimeout 和 setInterval:用于设置定时器的任务。根据设定的时间,在指定的延迟后执行一次或多次。 2. I/O 操作:包括网络请求、文件读写等异步操作。 3. UI 渲染:浏览器需要更新页面渲染时,会将渲染操作作为宏任务执行。 关于 `process.nextTick`,它是 Node.js 环境下的一个特殊的微任务。在 Node.js 中,微任务队列通常使用 `process.nextTick` 实现。与浏览器环境不同,Node.js 使用事件循环机制处理异步任务。 `process.nextTick` 的执行时机是比较特殊的。它会在当前操作完成后、下一个阶段开始之前立即执行。具体而言,它会在每个阶段结束时检查并执行所有排队的 `process.nextTick` 回调。这意味着 `process.nextTick` 的回调函数会在当前执行栈执行完毕后立即执行,而不是等待到微任务阶段。 由于 `process.nextTick` 的执行时机与浏览器环境的微任务不同,因此在代码迁移到浏览器环境时不能将其视为普通的微任务。需要使用 `Promise` 或 `MutationObserver` 等原生的浏览器 API 来处理微任务。