Skip to content

事件循环的理解

首先,JS 是一门单线程的语言,实现单线程非阻塞的方法就是事件循环机制。

js 中任务分为:

  • 同步任务:立即执行任务,一般直接进入到主线程
  • 异步任务:异步执行的任务,比如 ajax 请求,setTimeout 定时函数等

宏任务和微任务

异步任务分宏任务和微任务:

微任务是一个需要异步执行的函数,执行时机是在主函数执行结束后、当前宏任务结束前。 宏任务的时间粒度相对较大,执行的时间不能精确控制。

  • 微任务:Promise.then、process.nextTick、MutationObserver、Object.observe(已废弃、Proxy代替)
  • 宏任务:script、setTimeout、setInterval、setImmediate、I/O、UI rendering

区别

  • DOM 渲染:微任务在 DOM 渲染前执行,宏任务在 DOM 渲染后执行
  • 执行顺序不同:微任务在主函数执行结束后、当前宏任务结束前执行,宏任务在主函数执行结束后执行