前置知识
- JS 引擎是单线程执行的
- JS 代码分为两种
(1)同步代码
在执行栈中顺序执行,注意,包括 Promise({}) 里面的代码,而 .then(){} 才是异步代码
(2)异步代码
宏任务:在(宏)任务队列中等待执行,包括 script、定时器、网络请求等
微任务:在微任务队列中等待执行,包括 .then()、await 后面的全部代码(不跨作用域)
事件循环过程
<script></script>里面的代码先进宏任务队列,此时执行栈为空,且微任务队列为空,则将<script></script>代码放入执行栈执行- 执行栈中的同步代码顺序执行,遇见宏任务就放入宏任务队列,遇见微任务就放入微任务队列
- 当执行栈中的同步代码执行完后,就会先扫清微任务队列中的微任务,然后再在宏任务队列中取出一个宏任务放入执行栈,重回第二步,直至代码执行完毕
注意:任务队列中的都是已经完成的异步操作,而不是说注册一个异步任务就会被放在这个任务队列中