微任务和宏任务

在JavaScript中,任务分为两种类型:微任务和宏任务。

微任务是在当前任务执行完成后立即执行的任务,例如Promise回调、MutationObserver回调等。微任务的执行优先级高于宏任务。

宏任务是在当前任务执行完成后,等待一定时间后再执行的任务,例如setTimeout回调、setInterval回调、事件回调等。

在任务队列中,微任务排在宏任务之前执行。

例如以下代码:

复制代码
console.log("start");

setTimeout(() => {
  console.log("setTimeout");
}, 0);

Promise.resolve().then(() => {
  console.log("promise");
});

console.log("end");

输出的结果为:

复制代码
start
end
promise
setTimeout

原因是先执行同步代码输出start和end,然后遇到微任务,执行Promise回调输出promise,最后执行宏任务输出setTimeout。

相关推荐
2301_816651221 天前
移动语义在容器中的应用
开发语言·c++·算法
FlyWIHTSKY1 天前
Vue 3 onMounted 中控制同步与异步执行策略
前端·javascript·vue.js
2401_857918291 天前
实时数据处理中的C++应用
开发语言·c++·算法
2401_884563241 天前
C++中的装饰器模式实战
开发语言·c++·算法
xiangpanf1 天前
PHP vs Go:30秒读懂核心差异
java·开发语言
聆风吟º1 天前
【C标准库】C语言memset函数详解:从原理到实战避坑
c语言·开发语言·库函数·memset
idealzouhu1 天前
【Kotlin】 数据流完全指南:冷流、热流与 Android 实战
android·开发语言·kotlin
蜗牛攻城狮1 天前
【Vue3实战】El-Table实现“超过3行省略,悬停显示全文”的完美方案(附性能优化)
前端·vue.js·性能优化·element-plus
孙12~1 天前
前端vue3+vite,后端SpringBoot+MySQL
前端·html·学习方法
快快起来写代码1 天前
反射可能用于的场景
开发语言·python