computed的区别:给我看看代码computed:{foo(){if(this.a>0){returnthis.a}else{returnthis.b+this.c}}}data(){a:1,b:1,c:1,}计算属性会缓存上次的计算结果,强调:是最后一次,不是所有的历史;每次调用this.foo,返回上次的结果还是执行foo函数返回最新的结果?它由计算的响应式构造函数中的脏变量控制。如果dirty为真,则执行foo并返回最新的结果。否则会返回缓存的值,每次执行foo时,都会将dirty恢复为false,也就是说dirty控制是否从缓存中读取值,那么dirty什么时候会变为true呢?increment也会同步触发dirty的修改);computed响应式构造函数除了dirty还有一个deps数组,数组item是foo的computed属性的依赖。注意这个依赖不是上面代码This.a,this.b,this.c的表面,而是在执行foo函数的时候,只有触发了某个值的getter,才会加入依赖array,deps默认为[],当第一次执行foo函数遇到if(this.a)时,会触发this.a的getter,将this.a添加到deps中。此时依赖中只有this.a,dirty同步变为true,继续执行foo函数返回最新的结果。伪代码表示是假设此时deps中只执行了this.a。this.b='2'if(!deps.includes('this.b')){returnlastvalue}执行完this.a=2,返回最新的值,如果一开始this.a=-1,依赖数组中有a,b,c,此时this.a=-2,新值和旧值一样,那么它会返回最后一个值还是会重新计算?如果返回最后一个值(foo中的console没有执行),说明这个理论有问题。
