由于JS是单线程的编程语言,为了防止程序的阻塞,就会出现异步任务。异步任务完成后会添加进入任务队列,程序会不断的轮询任务队列,有任务就会添加进入主线程执行。
捕获.PNG

宏任务和微任务

异步任务是严格按照时间顺序压栈和执行的,当上一个异步任务执行完成之前,下一个异步任务执行之前,浏览器会重新渲染页面。宏任务和微任务在完成之后会分别压入不同的队列,而主进程完成同步任务后,会去先查找微任务队列,执行完之后就会去执行宏任务。
捕获.PNG

宏任务

  1. script(整体代码)
  2. setTimeout setInterval I/O
  3. UI交互事件
  4. postMessage
  5. MessageChannel
  6. setImmediate(Node.js 环境)

    微任务

  7. Promise.then

  8. Object.observe
  9. MutationObserver
  10. process.nextTick(Node.js 环境)