JavaScript | 从nextTick到宏任务与微任务

Vue.nextTick官方文档:

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

言外之意,Vue中的DOM(view)都不是在修改model之后马上更新的,而是一个异步的更新过程:在修改了model之后,把这些数据的修改全部 push 到一个队列里,然后内部调用 一次 nextTick 去更新视图。

为了了解每次tick/loop的流程,得先从宏任务和微任务开始说起:
宏任务:setTimeout,setInterval,IO,整个<script>(重要)

微任务:Promise,process.nextTick等等

那么一次事件循环(称作Tick或Loop)如下图:

  1. 开始执行,首先执行第一个宏任务:全局<script></script>中的代码,遇到异步代码就交给相应的异步工作线程执行;
  2. 执行到</script>,结束第一个宏任务,查看微任务队列,若有微任务,按顺序清空。若没有微任务,就执行UI Render渲染DOM,此时就完成了一次Loop/Tick;
  3. 继续查找宏任务队列并执行

由此看出,并不是很多文章所谓的先执行微任务再执行宏任务!而是执行下一个宏任务之前,必须把微任务队列给清空了!而进入代码执行的第一个任务就是宏任务(script整体)!而每执行一个宏任务,就是一个新的Loop/Tick


先来个简单例子:

    console.log('script start');
    setTimeout(function() {
      console

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值