任务队列和微任务队列

156 阅读1分钟

任务队列 规律

  • 全局作用域可以视为一个大函数的函数体
  • 这个函数处于任务队列的第一位
  • setTimeout(fn, n) 中的 fn 会被放入任务队列
  • 任务队列中的计时任务,如果还没到时间,就不会执行

微任务 也就是小任务 全局函数 queueMicrotask(fn) 可以把fn放入微任务队列 优先执行小任务 再执行任务(也可以叫大任务/宏任务 插队 微任务可以在下一次大任务执行前,插入更多的微任务,推迟大任务的执行


你可以在大脑里想浏览器会把任务和微任务放到两个数组里去,按顺序调用 例子:

setTimeout(() => {
  console.log(1)
  setTimeout(() => {
    console.log(100)
  })
  queueMicrotask(() => {
    console.log(200)
  })
})
queueMicrotask(() => {
    console.log(2)
  })

任务队列:log(1), 微任务队列:log(2) 先执行log2,然后执行log1 任务队列:log(100) 微任务队列:log(200) 执行log200,然后到log100

以上例子只是脑海中的演示,浏览器实际怎样执行,就不知道了。 宏和微任务就是这么简单,画队列然后按定义去运行即可