当调用set方法时会走dep.notify()
然后watcher.update()->queueWatcher()
每调用set一次就会调用queueWatcher() 一次,同一个属性多次调用里面会去重,只会取最新的值,属性不存在watcher加入队列
启动异步任务nextTick()
执行刷新函数,启动异步函数timerFunc()
首选微任务异步操作,ios不支持promise会直接用setTimeout,下面1和2是微任务
1.promise
2.mutationobserver
3和4是宏任务
3.setImmediate
4.setTimeout
调用刷新函数:
watcher.run()
1是微任务:浏览器不会刷新 批量刷新 放到本次事件周期的前面 所以比较快
2是宏任务:多任务会刷新好几次 放到下一次的事件周期 所以比较慢
异步任务:批量操作变量