1.JavaScript 把异步任务做了进一步的划分,分别是:
① 宏任务(macrotask):
- 异步 Ajax 请求、
- script、
- setTimeout、setInterval、
- 文件操作、
- requestAnmationFrame、
- 其它宏任务、
② 微任务(microtask):
- .then()、.catch() 和 .finally()
- process.nextTick
- 其它微任务
2. 宏任务和微任务的执行顺序
执行过程:
1、执行第一个宏任务script ,执行同步代码。
2、再执行所有微任务队列。
3、再执行宏任务。
4、一直循环。
执行过程中碰到宏任务就放到宏任务队列排队,碰到微任务就去微任务排队。
备注:
1、js开始运行就算宏任务!!!哪怕什么都没有操作也算宏任务,就是没有同步代码的情况,接下去也是清空微任务队列!!!宏任务结束,下一步一定是清空微任务队列!!!就是第二步。
2、两个定时器如果时间一样,按照列队先后顺序执行。
3、两个定时器,时间短的先执行,不管进入列队的先后顺序。
4、for循环属于同步任务。
5、dom渲染在宏任务之前。
6、new Promise(()=>{})属于同步任务。
7、await属于.then()的语法糖,后面所有的代码都要放到微任务队列等待执行。