1.先判断Promise
2.在判断MutationObserver
3.在判断setImmediate
4.最后setTimeout
如果以上都不支持就只能用setTimeout来完成异步执行了
延迟调用优先级如下:Promise > MutationObserver > setImmediate > setTimeout
每次event loop的最后,会有一个UI render,也就是更新DOM
只要让nextTick里的代码放在UI render步骤后面执行,就能访问到更新后的DOM了。
vue的nextTick方法的实现原理:
vue用异步队列的方式来控制DOM更新和nextTick回调先后执行。
microtask因为其高优先级特性,能确保队列中的微任务在一次事件循环前被执行完毕。