computed 和 watch 区别
computed
- 支持缓存,只有依赖的数据发生变化的时候,才会重新计算
- 不支持异步,无法监听数据的变化,computed的值默认走缓存,基于响应式依赖进行缓存,也就是从 data拿到的数据或者父组件的props中传递过来的
- 如果一个属性是由其他属性计算而来的,一般会使用computed,如果computed是一个函数,则默认使用get方法
watch
- 不支持缓存,更多的是观察的作用 ,类似于某些数据的监听回调
- 函数有两个参数,immediate:发生变化立即触发,deep:深度监听,发现数据内部的变化,在复杂数据类型中使用,例如数组中的对象发生变化
总结:
- 当需要进行数值计算,并且依赖于其他数据的时候,应该使用 computed 属性,因为可以利用computed的缓存特性,避免每次获取值都需要重新计算(购物车计算总额的时候)
- 当需要在数据变化时执行异步或者开销较大的操作的时候,使用watch (搜索数据)
数据 深拷贝 ,浅拷贝
堆和栈:
1.栈内存存储的是局部变量而堆内存存储的是实体 ;
2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
深拷贝的作用就是:改变现数据不影响原数据