1. 前言
在 JavaScript 中,任务可以分为同步任务、异步任务,而异步任务又进一步细分为宏任务和微任务。
- 同步任务:指那些在主线程上排队执行的任务,只有前一个任务执行完毕后,才能开始执行下一个任务。
- 异步任务:异步任务不会进入主线程,而是进入'任务队列'中等待执行。
JavaScript 语言本身是单线程,这意味着在任何时刻,JavaScript 引擎中只有一条主线程来处理所有的任务。
2. 同步任务
同步任务只有前一个任务执行完毕后,才能开始执行下一个任务,特点是按照顺序执行,会阻塞后续代码的执行。
console.log(1);
console.log(2);
3. 异步任务
异步任务是只有当主线程上的同步任务全部执行完毕后,才会从任务队列中取出异步任务进入主线程执行。
console.log(1); // 同步任务
setTimeout(() => console.log(3), 0); // 异步任务,等待同步任务执行完毕之后,才会执行
console.log(2); // 同步任务
宏任务
宏任务是由宿主环境发起的异步任务,通常包含较长的等待时间或需要等待 I/O 操作完成。
常见的宏任务:setTimeout / setInterval、ajax 请求、dom 事件。
微任务
微任务通常用于处理 Promise 或其他需要尽快执行的操作。
常见的微任务:Promise.then、async / await。
setTimeout(() => console.log('定时器 - 宏任务'), 0);
Promise.resolve().then(value => {
console.log();
});
.();


