微任务和宏任务的区别
时间: 2023-11-02 08:54:33 浏览: 110
微任务和宏任务是在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 ]
微任务和宏任务是什么
微任务和宏任务是异步任务的两种分类。宏任务包括整体代码(即外层同步代码)、setTimeout、setInterval、I/O、UI渲染等。微任务包括Promise、async/await、promise.then/catch/finally、事件队列等。宏任务和微任务的执行顺序是先执行主线程执行栈中的代码(同步任务),然后将异步宏任务放入宏任务队列中,将异步微任务放入微任务队列中。当所有同步代码执行完毕后,会先执行微任务队列中的微任务,直到微任务队列被清空,然后再执行宏任务队列中的宏任务,循环往复,直至所有任务执行完毕。简言之,微任务优先于宏任务执行,即当微任务队列的所有任务全部执行完后,才开始执行宏任务。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* [宏任务与微任务](https://blog.csdn.net/ghc19980122/article/details/129099769)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [宏任务与微任务的理解](https://blog.csdn.net/weixin_47981807/article/details/122309155)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [什么是宏任务微任务](https://blog.csdn.net/zyj123__/article/details/126810716)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文