nextTick的原理
简单的描述: 就是将nextTik函数的回调放到全局事件循环队列中去,等待下一次事件循环去调用它。
注意: 这个队列有可能是微任务(microTask )或者宏任务(macroTask )。Promise 和 MutationObserver 属于微任务队列,setImmediate 和 setTimeout 属于宏任务队列。
具体源码流程
-
首先检测环境。 检查回调api是哪一个函数,检查promise,MutationObserver,setImmediate,setTimeout。并将执行队列的函数执行
-
nextTick函数实现。将回调push进一个事件执行执行队列
为什么nextTick优先promise
注意: nextTikc 优先加入微任务队列 即 promise
nextTick的降级策略,先微任务,再降级到宏任务
这里我猜原因是这样
事件循环机制有关
因为:每一个宏任务执行完之后都会把微任务队列全部执行一遍,在继续执行下一个宏任务。 既然要实现在执行nextTick的回调中迅速拿到dom,那就必须立即执行