宏任务和微任务有那几种
时间: 2023-11-02 08:38:05 浏览: 244
宏任务和微任务是指在 JavaScript 中异步任务的两种分类,它们的执行顺序不同。
常见的宏任务有:
1. setTimeout 和 setInterval
2. I/O 操作
3. DOM 事件
4. requestAnimationFrame
常见的微任务有:
1. Promise.then 和 catch
2. process.nextTick
3. Object.observe
4. MutationObserver
在每个事件循环中,所有的宏任务都会首先执行完毕,然后执行所有的微任务。因此,微任务的执行优先级比宏任务高。
相关问题
代码解释宏任务和微任务
在 JavaScript 中,异步任务分为宏任务和微任务。当异步任务完成时,会被推入宏任务队列或微任务队列中,等待被执行。
宏任务(macrotask)通常包括以下几种:
- setTimeout 和 setInterval
- DOM 事件(如 click、load)
- Ajax 请求、Fetch 请求、WebSocket 请求等网络请求
- Node.js 中的 I/O 操作等
在 JavaScript 运行时,主线程的任务执行完毕后,会执行宏任务队列中的任务。当宏任务队列中的任务执行完毕后,会检查微任务队列中是否有任务需要执行。
微任务(microtask)通常包括以下几种:
- Promise.then()、Promise.catch()、Promise.finally()
- MutationObserver
- process.nextTick(Node.js 中的微任务)
微任务的执行时机是在当前宏任务执行完毕后,在下一个宏任务执行之前。也就是说,微任务执行时机比宏任务更早,因此可以用来处理一些需要尽快处理的任务。
总之,宏任务和微任务的执行顺序是:
1. 执行当前宏任务(如 script 全局任务)
2. 执行当前宏任务产生的微任务
3. 执行下一个宏任务(从宏任务队列中取出一个任务进行执行)
4. 重复 2、3 步骤,直到宏任务队列和微任务队列都为空。
异步操作中的宏任务与微任务
在异步操作中,宏任务和微任务是两种不同的任务类型,它们决定了执行顺序和优先级。
宏任务(Macrotask)是一组需要异步执行的任务,通常包括以下几种:
1. setTimeout 和 setInterval 回调函数
2. DOM 事件处理程序
3. XMLHttpRequest 和 fetch 的回调函数
4. Node.js 中的 I/O 操作
宏任务会进入事件队列(event queue),在主线程空闲时被执行,每次只执行一个宏任务。
微任务(Microtask)是一组需要在当前任务执行完成后尽快执行的任务,通常包括以下几种:
1. Promise 的回调函数
2. MutationObserver 的回调函数
微任务会在当前任务执行完成后立即执行,而不需要等待其他宏任务。微任务的执行优先级高于宏任务,即微任务会在下一个宏任务之前执行。
在事件循环中,每次执行完一个宏任务后,会检查是否有微任务需要执行,如果有,则会依次执行所有微任务,直到微任务队列为空,然后再继续执行下一个宏任务。
总结起来,宏任务和微任务的区别在于执行时机和优先级。宏任务是异步任务中较大的单位,而微任务是较小的单位,用于在当前任务执行完成后尽快执行。
阅读全文