【JS】 事件循环

70 阅读1分钟

前置知识

  1. JS 引擎是单线程执行的
  2. JS 代码分为两种

(1)同步代码

在执行栈中顺序执行,注意,包括 Promise({}) 里面的代码,而 .then(){} 才是异步代码

(2)异步代码

宏任务:在(宏)任务队列中等待执行,包括 script、定时器、网络请求等

微任务:在微任务队列中等待执行,包括 .then()、await 后面的全部代码(不跨作用域)

事件循环过程

  1. <script></script> 里面的代码先进宏任务队列,此时执行栈为空,且微任务队列为空,则将 <script></script> 代码放入执行栈执行
  2. 执行栈中的同步代码顺序执行,遇见宏任务就放入宏任务队列,遇见微任务就放入微任务队列
  3. 当执行栈中的同步代码执行完后,就会先扫清微任务队列中的微任务,然后再在宏任务队列中取出一个宏任务放入执行栈,重回第二步,直至代码执行完毕

注意:任务队列中的都是已经完成的异步操作,而不是说注册一个异步任务就会被放在这个任务队列中

参考:【前端八股文】事件循环-宏任务和微任务