594   JS

一,背景

  • JS 是单线程执行的语言,可以通过异步任务执行来提高执行效率,也避免了主线程阻塞
  • 异步任务利用 Event loop 机制来执行,将需要任务放到堆栈中,在主线程执行完后,再执行堆栈的任务,依次循环下去

二,Event loop

下图是 Event loop 的框架图

WeChat Image_20190925155126
  • task queue 也称为宏任务,存放的是 setTimeout、setInterval、I/O、UI交互事件、postMessage、MessageChannel、setImmediate(Node.js 环境) 等相关的异步任务
  • micro task queue 称为微任务,包括 Promise.then、MutaionObserver、process.nextTick(Node.js 环境)
特别注意
在 Node 中,会优先清空 next tick queue,即通过process.nextTick 注册的函数,再清空 other queue,常见的如Promise;
此外,timers(setTimeout/setInterval) 会优先于 setImmediate 执行,因为前者在 timer 阶段执行,后者在 check 阶段执行。



Leave a Reply

Your email address will not be published. Required fields are marked *