微任务和宏任务的区别
时间: 2023-11-02 10:54:33 浏览: 49
微任务和宏任务是在JavaScript中用于管理异步操作的两种不同的执行机制。
微任务(Microtask)是一个相对较小的任务,通常是由Promise对象的回调函数产生的。当一个Promise对象被resolve或reject时,与该Promise相关联的微任务会被添加到微任务队列中等待执行。微任务的执行时机一般在当前任务执行结束后,下一个事件循环之前。常见的微任务包括Promise的回调函数、MutationObserver的回调函数等。
宏任务(Macrotask)是一个相对较大的任务,通常由浏览器提供的API触发,例如setTimeout、setInterval、requestAnimationFrame等。当宏任务被触发时,相关的任务会被添加到宏任务队列中等待执行。宏任务的执行时机一般在当前事件循环结束后,下一个事件循环开始时。
区别总结如下:
- 微任务是相对较小的任务,宏任务是相对较大的任务。
- 微任务的执行时机在当前任务执行结束后,下一个事件循环之前;宏任务的执行时机在当前事件循环结束后,下一个事件循环开始时。
- 微任务的优先级高于宏任务,即微任务会在宏任务之前执行。
- 微任务包括Promise的回调函数、MutationObserver的回调函数等;宏任务包括setTimeout、setInterval、requestAnimationFrame等。
需要注意的是,微任务和宏任务的执行顺序是有区别的,具体执行顺序可以参考相关规范(例如HTML规范或JavaScript规范),不同浏览器也可能有差异。
相关问题
微任务和宏任务 顺序
微任务和宏任务的执行顺序是有区别的。在每一个宏任务中又可以产生微任务,当微任务全部执行结束后执行下一个宏任务。这样的执行顺序可以表示为【宏任务 [微任务】 -> 【宏任务 [微任务】 -> 【宏任务 [微任务】... 宏任务。具体来说,当一个宏任务开始执行时,如果在宏任务的执行过程中产生了微任务,那么这些微任务会被添加到微任务队列中。当当前宏任务执行完成后,会立即执行微任务队列中的任务,直到微任务队列为空。然后才会执行下一个宏任务。这样的执行顺序保证了微任务优先于下一个宏任务的执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [干货:宏任务和微任务执行顺序详解](https://blog.csdn.net/frontend_frank/article/details/130096892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [微任务和宏任务哪个先执行?](https://blog.csdn.net/qq_59737146/article/details/128814404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
微任务和宏任务面试题
微任务和宏任务是JavaScript中一种处理异步操作的机制。它们是用来管理和调度异步代码执行的方式。
微任务(Microtask)是指那些需要在当前任务执行结束后立即执行的任务。在JavaScript中,微任务可以通过Promise、MutationObserver和queueMicrotask函数来创建。微任务的执行时机是在当前任务执行完毕后,在下一个任务开始之前。
宏任务(Macrotask)是指那些需要在事件循环中等待一段时间后执行的任务。常见的宏任务包括setTimeout、setInterval、I/O操作、UI渲染等。宏任务的执行时机是在下一个事件循环开始时。
常见的例子可以是:
```javascript
console.log('1');
setTimeout(function() {
console.log('2');
}, 0);
console.log('3');
Promise.resolve().then(function() {
console.log('4');
});
console.log('5');
```
输出结果为:
1
3
5
4
2
解释:
- 1、3、5是同步代码,按顺序输出。
- 4是微任务,会在同步代码执行完毕后立即执行。
- 2是宏任务,会在下一个事件循环开始时执行。