JavaScript 把异步任务又做了进一步的划分,异步任务又分为两类,分别是:
① 宏任务(macrotask)
- 异步 Ajax 请求
- setTimeout、setInterval
- 文件操作
- 其它宏任务
② 微任务(microtask)
- Promise.then、.catch 和 .finally
- process.nextTick
- 其它微任务
宏任务和微任务的执行顺序![](https://img-blog.csdnimg.cn/fdcd833496b34e1ab027a1a4f4d61ace.png)
每一个宏任务执行完之后,都会检查是否存在待执行的微任务,
如果有,则执行完所有微任务之后,再继续执行下一个宏任务。
分析以下代码输出的顺序
正确的输出顺序是:bdca
分析:
① 先执行所有的同步任务
- 执行第 6 行、第 11 行代码
② 再执行微任务
- 执行第 9 行代码
③ 再执行下一个宏任务
- 执行第 2 行代码