js中代码的执行顺序

489 阅读1分钟

简单来说js的执行顺序为以下:

执行顺序

  1. 同步程序

  2. process.nextTick

  3. 微任务

  4. 宏任务

  5. setlmmediate

宏任务可以简单的认为有这几类:延时器(settimeout),ajax,读取文件

任务队列中:Promise.then > MutationObserver > setImmediate > setTimeout

微任务:promise.then中的代码

此时延时器需要注意

任务在执行时会先执行运行栈中的代码,之后再执行任务队列中的代码如图:

当延时器有了延时,它不会立刻放入任务队列中,而是在任务循环中等待延时结束之后,再将它插入到任务队列中,若插入前任务队列中有其他任务,先执行其他任务最后才执行这个延时器任务 image.png

下面上一道面试题

setImmediate(() => {
  console.log(9)
})
setTimeout(() => {
  console.log(3)
}, 0)
setTimeout(() => {
  console.log(4)
}, 100)
console.log(5)
new Promise((resolve) => {
  console.log(6)
  resolve()
}).then(() => {
  console.log(7)
})
process.nextTick(() => {
  console.log(8)
})
console.log(1)
setTimeout(() => {
  console.log(2)
}, 0)
setTimeout(() => {
  console.log(10)
}, 0)
console.log(11)

输出为:5, 6, 1,11,8, 7, 3, 2, 10, 9, 4

这里有个小坑,要注意延时器有没有延时,若是出现延时则需要等待其他任务执行之后才去执行