# 什么是浏览器事件循环,为什么是浏览器?

# 为什么有时间循环机制?

# 两种任务,什么是宏任务,什么是微任务

宏任务:整体代码、setTimeout、setInterval、I/O操作 微任务:new Promise().then,MutaionObserver(前端的回溯)

# 为何引入微任务,只有宏任务可行否?

宏任务-队列、先进先出,无法控制执行时机,不适配有高优先级响应任务的场景

# node中的事件循环和浏览器中的事件循环有什么区别?

宏任务:

  • time定时器:执行setTimeout和setInterval回调函数
  • pending callback待定回调:执行延迟到下一个循环迭代的I/O回调
  • idle prepare:仅系统内部使用
  • poll:检索新的I/O事件,执行与I/O相关的回调
  • check:执行setImmediate()回调
  • close callback:socket.on('close',()=>{})

node中宏任务、微任务执行顺序:

  • version < Node10:

    • 执行完一个阶段中所有任务
    • 执行nextTick队列内容
    • 执行微任务队列内容
  • version > Node10

    • 与浏览器相同