在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。