# computed
# 和 watch 差异
computed是生成一个新的属性挂载到实例上,watch是监听已经存在且挂载到实例上的数据,所以watch也可以监听computed属性变化computed具有缓存,只有依赖变化才会重新计算computed适合一个数据被多个数据影响,watch适合要给数据影响多个数据
# 原理
- 依赖变化,修改脏数据标志为真,但不会立即重新计算,只有在访问计算属性的时候,才会重新计算或读取缓存,有懒计算特性
# 流程
- 响应式的值
count更新 - 同时通知
computed watcher和 渲染watcher更新 computed watcher把dirty设置为true- 视图渲染读取到
computed的值,由于dirty所以computed watcher重新求值。
不缓存:
count改变,先通知到 计算watcher更新,设置dirty = true- 再通知到 渲染
watcher更新,视图重新渲染的时候去 计算watcher中读取值,发现dirty是true,重新执行用户传入的函数求值。
缓存:
other改变,直接通知 渲染watcher更新。- 视图重新渲染的时候去 计算
watcher中读取值,发现dirty为false,直接用缓存值watcher.value,不执行用户传入的函数求值。