事件队列

起因:js单线程,所有任务需要排队,但遇到耗时的操作(网络请求),就会堵塞后续的任务
解决:将耗时的操作放到异步任务队列,先执行同步的任务,等异步任务完成之后,通知主线程,再去执行

事件循环

  • 所有同步任务都在主线程上执行,形成一个执行栈
  • 主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列之中放置一个事件。
  • 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  • 主线程不断重复上面的第三步

MacroTask(宏任务)

script全部代码
setTimeoutsetIntervalsetImmediate
I/O、网络请求
UI Rendering

MicroTask(微任务)

Process.nextTick(Node独有)
Promise
MutationObserver

你可能感兴趣的:(事件队列)