一般对vue了解不深的都理解不了这个问题,
首先说一下vue的基本知识点:
watcher 分为三种,lazy watcher和 user watcher和渲染watcher
每一个计算属性都对应一个lazy watcher对象,
每一个watch对象的属性都对应一个user watcher对象,
每一个组件都对应一个渲染watcher对象
每一个data中的属性都对应一个dep对象,dep对象是用来收集watcher和通知watcher更新的,
简单来说就是当前属性的watcher管理对象,当获取data中的属性时,会触发属性的get方法,然后当前属性对应的dep对象会进行watcher收集操作,当更新data中的属性时,会触发属性的set方法,然后当前属性对应的dep对象会通知之前收集的watcher进行更新操作
那么,什么是lazy watcher?
观察vue的初始化过程,发现一个重要的知识点,就是user watcher和渲染watcher在创建的时候,就会执行watcher的收集操作
详细步骤是执行watcher的get方法赋值给watcher的value属性,get方法会触发getter方法,getter方法对于user watcher来说会去获取data中属性的值,对于渲染watcher,会去执行更新组件的方法,里面会先执行render方法生成vnode,render方法里