js执行逻辑

360 阅读1分钟

js 是单线程执行的,js中的任务按顺序一个一个的执行,但是一个任务耗时太长,那么后面的任务就需要等待,为了解决这种情况,

将任务分为了同步任务和异步任务,而异步任务又可以分为微任务和宏任务。

image.png

1. JavaScript 事件循环 为了解决 js 单线程在执行大量耗时代码时的问题,程序员将 js 的任务分为两大类:

  1. 同步任务
  • 进入主线程执行
  1. 异步任务
  • 进入Event Table执行
  • 当指定的事件完成时,Event Table会将这个回调函数移入Event Queue
  • 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行
  • 上述过程会不断重复,也就是常说的Event Loop(事件循环) 2. macro-task(宏任务)、micro-task(微任务) 除了广义的同步任务和异步任务,其实对任务还有更细致的划分
  • macro-task(宏任务):包括整体代码 script,setTimeout,setInterval
  • micro-task(微任务):Promise,process.nextTick js 事件循环机制,决定了代码执行顺序。

第一步:js 解释器识别所有 js 代码,将同步的代码放到主线程执行;异步的代码放到Event Table执行。这也是第一次宏任务执行完毕!

第二步:接下来执行所有的微任务。

之后一直循环一、二步骤