任务队列 规律
- 全局作用域可以视为一个大函数的函数体
- 这个函数处于任务队列的第一位
- 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
以上例子只是脑海中的演示,浏览器实际怎样执行,就不知道了。 宏和微任务就是这么简单,画队列然后按定义去运行即可