一、闭包
闭包
是函数对其定义作用域的变量引用,虽然便于保存状态,但可能会导致内存泄漏。循环引用
是内存泄漏的常见原因之一,互相引用的对象会阻止垃圾回收器清理。- 使用
WeakMap
和开发者工具等方法可以帮助检测和避免循环引用的内存泄漏
二、说-下 v-if 和 v-show 的区别,以及它们的使用场景。
总:
v-if 和 v-show 都是用来控制元素是否展示的。但是它们的实现原理和在项目中的应用场景确实有一定区别。分:
那么咱们先说实现原理。
v-show 主要通过 css 属性 diplav:none; 来控制元素的显示和隐藏。那么怕用户看不到,但是 dom 依然是存在的,而 v-if 主要通过 是否渲染 来控制元素的展示和消失。当用户看不到它的时候,那么这个元素是不存在的。这样一个存在和不存在的特性,如果是在企业项目中差别就会比较大了。特别是在组件上使用时,其中会涉及到 生命周期 以及 状态保存 的问题,比如,通过一个 dialog 来处理编辑用户功能。
那么使用 v-show 时。当页面展示时,dialog 就已经被渲染出来了,那么这就意味着 dialog 的生命周期已经完成,如果涉及到 props 传参,那么其实参数就已经传递了,同时当修改了 dialog 的数据,关闭 dialog 时,那么 dialog 的状态会被保持。
而使用v-if的话。当页面展示时,dial0g,是没有被渲染的,只有主动触发绑定值变化,dialog 才会显示出来。这就意味着,此时 dialog 的生命周期会执行,同时 props 才开始传递。同时当修改了 dialog 的数据,关闭 dialog 时,那么 dialog 的状态会被清空(组件消失)。v-show 的性能相对会更高,而 v-if 会更加消耗性能。
但是很多场景中,性能的消耗对于用户而言,感知是有限的。
总:
所以,v-if和 v-show 的选择,我们需要基于当前 dialog 的业务场最来进行判断。
如果当前 dialog 需要保存状态 或者 需要进行初始渲染,那么可以使用 v-show。
如果当前 dialog 不需要保存状态 或者 希望控制它的渲染时机,那么可以使用 v-if.