温故知新(七七)nextTick 是在本次循环执行,还是在下次,setTimeout(()=>{},0)呢

nextTick 是在本次循环执行,还是在下次,setTimeout(()=>{},0)呢

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nextTick 在本次循环执行,且全部执行,setTimeout 在下次循环执行

由于 js 是单线程,js 设计者吧任务分为同步任务和异步任务,同步任务都在主线程上排队执行,前面任务没有执行完成,后面的任务会一直等待;异步任务则是挂在一个任务队列里,等待主线程所有任务执行完成后,通知任务队列可以把可执行的任务放到主线程执行。异步任务放到主线程执行完成后,又通知任务队列把下一个异步任务放到主线程执行。这个过程一直持续,直到异步任务执行完成,这个持续重复的过程就叫做 Event Loop。而一次循环就是一次 tick。
在任务队列中的异步任务又可以分为两种 microtask(微任务)和 macrotask(宏任务)

  • microtask:promise.then,process.nextTick,Object.observe,MutationObserver
  • macrotask:script整体代码、setTimeout、setInterval等

执行优先级上,先执行宏任务,再执行微任务
执行过程中需要注意的几点是:

  • 在一次 event loop 中,microtask 在这一次循环中是一直取一直取,直到清空 microtask 队列,而 macrotask 则是一次循环取一次。
  • 如果执行事件循环的过程又加入了异步任务,如果是 macrotask,则放到 macrotask 末尾,等待下一轮循环再执行。如果是 microtask,则放到本次 event loop 中的 microtask 任务队列末尾继续执行。直到 microtask 队列清空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值