js eventLoop事件循环机制

4/10/2023 js

javascript 是单线程,同一时间只能执行一件事情

  • 宏任务
    • script(整体代码)、setTimeout、setInterval、setImmediate、I/O、UI rendering
  • 微任务
    • promise、Object.observe、MutationObserver
    • 注意:new promise不是微任务,.then,.catch才是异步操作才是微任务
  • 优先任务级(微任务大于宏任务)
    • process.nextTick > promise.then > setTimeout > setImmediate

微任务永远跟在当前宏任务后面

一个宏任务和它下方的所有微任务合在一起统称事件循环

每一个微任务都有一个微任务队列

执行顺序:同步任务(主线程任务) > 异步任务(微任务 > 宏任务) > 下一次循环

事件循环机制,大体上由三个部分组成调用栈(call stack)消息队列(Message Stack)微任务队列(Microtask Stack)

  • 调用栈:执行
  • 消息队列:存放宏任务
  • 微任务队列:存放微任务

流程:自上而下调用--遇到函数调用会把函数压入调用栈当中(被压入的函数叫做帧)--函数调用完返回后会从调用栈当中弹出--遇到宏任务将其加入到消息队列当中--遇到微任务将其加入微任务队列当中--当调用栈为空时,将微任务队列当中内容压入调用栈--再次为空,将消息队列内容压到调用栈当中--一波接一波。。。

Last Updated: 4/18/2023, 2:49:49 PM
    晴天
    周杰伦