宏任务:setTimeout,setInterval,DOM事件,Ajax请求
DOM渲染
微任务:Promise,async/await
顺序:微任务 < DOM渲染 < 宏任务
总结:微任务的执行时机比宏任务早
代码:
<script type="text/javascript">
console.log(1);
//宏任务
setTimeout(() => {
console.log(2);
},0);
//微任务
Promise.resolve().then(() => {
console.log(3);
})
console.log(4);
</script>
效果:
1跟4是同步代码,2和3是异步代码,Promise比setTimeout执行早所以先打印3再打印2,且3和2之间有DOM渲染。
再例如:
<script type="text/javascript">
setTimeout(() => {
console.log("定时器 - 1"+'- 宏任务');
},0);
Promise.resolve().then(value => {
console.log('Promise - 2'+'- 微任务');
})
console.log('console - 3'+'- 同步代码');
</script>
效果:
所以,异步任务种的事件并不是严格按照顺序来执行的。