JavaScript事件循环

JavaScript事件循环

  1. js是单线程
  2. 事件循环
    1. 宏任务

      1. script整体代码
      2. setTimeout
      3. setInterval
      4. setImmediate
      5. I/O
      6. UI rendering
    2. 微任务

      1. Promise
      2. Object.observe
      3. MutaionObserver
    3. 优先级

      1. process.nextTick > Promise.then > setTimeout > setImmediate
      2. 微任务会在当前所处的宏任务之后,平级的宏任务之前执行
        1. script标签内的代码是一个宏任务。其中的子级setTimeout是一个子级宏任务,Promise.resolve().then(() => console.log(4))是一个子级微任务。所以会先执行子级微任务,再执行子级宏任务
      3. 宏任务包含微任务,以此嵌套。当前宏任务中的子级宏任务会在当前宏任务的最后执行;当前宏任务中的子级微任务会在当前宏任务执行完成之后,且在当前宏任务的子级宏任务执行之前执行
    4. 案例

         console.log(1);
         setTimeout(() => {  // 宏任务队列
            console.log(2)
         }, 3000);
         Promise.resolve().then(console.log(3))
         console.log(4)
         // 结果:1,3,4,2
      
         console.log(1);
         setTimeout(() => {  // 宏任务队列
            console.log(2)
         }, 3000);
         Promise.resolve().then(() => console.log(3))
         console.log(4)
         // 结果:1,4,3,2
      
    5. 案例总结:

      1. then方法可以接收一个Promise执行成功的回调函数,和一个执行失败的回调函数。
      2. 案例1接收的是一个表达式console.log()这个表达式会被优先调用,然后将返回值传递给then方法
      3. 第二个案例传递给then方法的是Promise执行成功之后的回调函数,这个回调函数是微任务

以上内容仅为查阅多方资料的一个总结性的个人笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值