Skip to content

Latest commit

 

History

History
29 lines (14 loc) · 1.62 KB

事件循环.md

File metadata and controls

29 lines (14 loc) · 1.62 KB

事件循环

  • 同步:如果一个函数返回的时候,调用者能够立刻得到结果,那么这个函数就是同步的。
  • 异步:如果一个函数返回的时候,调用者不能够立刻得到结果,而是需要在将来某一时刻通过一定的手段得到结果,那么这个函数就是异步的。

JS的所有任务分为同步任务和异步任务

  • 同步任务:在主线程上排队执行的任务,只有前一个任务执行完成,才能执行下一个任务。
  • 异步任务:不进入主线程,而是放在任务队列中,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

事件循环:所有同步任务都在主线程上执行,形成了一个执行栈。主线程之外还存在一个任务队列,只要异步任务有了运行结果,就在任务队列中放置一个事件。一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,按顺序取出任务,放到执行栈中去执行,如此循环往复,形成了事件循环。

任务队列分为宏任务和微任务:

  • 宏任务:包括script整体代码,setTimeOut,setInterval等。
  • 微任务:包括Promise.then等。

事件循环对宏任务和微任务的处理:

1、首先从宏任务队列中取出第一个任务。

2、执行完第一个宏任务,再将所有微任务取出,依次全部执行,清空微任务队列,这样一次事件循环周期执行完成。

3、再从宏任务队列中取出一个任务,执行完成,再执行本次事件循环周期的所有微任务,如此循环往复执行。