當(dāng)調(diào)用set方法時(shí)會(huì)走dep.notify()
然后watcher.update()->queueWatcher()
每調(diào)用set一次就會(huì)調(diào)用queueWatcher() 一次,同一個(gè)屬性多次調(diào)用里面會(huì)去重,只會(huì)取最新的值,屬性不存在watcher加入隊(duì)列
啟動(dòng)異步任務(wù)nextTick()
執(zhí)行刷新函數(shù),啟動(dòng)異步函數(shù)timerFunc()
首選微任務(wù)異步操作,ios不支持promise會(huì)直接用setTimeout,下面1和2是微任務(wù)
1.promise
2.mutationobserver
3和4是宏任務(wù)
3.setImmediate
4.setTimeout
調(diào)用刷新函數(shù):
watcher.run()
1是微任務(wù):瀏覽器不會(huì)刷新 批量刷新 放到本次事件周期的前面 所以比較快
2是宏任務(wù):多任務(wù)會(huì)刷新好幾次 放到下一次的事件周期 所以比較慢
異步任務(wù):批量操作變量