事件轮询

109 阅读1分钟

事件轮询

  • 时间: 从开始执行代码开始执行轮询

  • 规则:

       => 从 JS 整体代码开始(这是一个宏任务)
    
       => 没执行完毕一个宏任务, 就会清空一次微任务队列(不管微任务队列里有多少任务, 都执行完毕)
    
       => 再次执行下一个宏任务
       
       => 循环往复, 直到所有的任务队列清空结束
    
关键字:
    1. 单线程: JS 是一个单线程的代码执行机制, 逐行向下执行, 上边的代码执行时间过长会阻塞下边的代码
    1. 调用栈: 用来执行代码的, 所有的代码进栈执行, 执行完毕再出栈 (后进先出)
    1. 队列: 用来存放异步任务的, 先进先出
      • => 宏任务队列: JS 整体代码, setTimeout, setInterval...
      • => 微任务队列: promise.then()...
    1. 轮询: 轮流询问 宏任务 与 微任务队列的任务来执行
    1. 注意: WEBApi, 用来负责提供异步机制, 计时, 分配任务去指定队列
  • 最关键的一句话: 每执行完毕一个宏任务, 会清空一次微任务队列 (前提是你要区分清楚什么是同步任务, 什么是宏任务, 什么是微任务)