获得徽章 0
赞了这篇文章
赞了这篇文章
在JavaScript中ES6之后才开始区分弱引用与强引用,我们一般使用的变量定义便是强引用,在JS垃圾回收机制中每一次对同一片地址的引用都会使其引用技术加一(JS垃圾回收引用计数),ES6新推出的Map、Set新数据类型对于键值的引用都是属于强引用,也就是set方法添加键值后将该键、值对象计数值数加一。
而使用weakMap、weakSet这两个数据类型则不会对添加的键(注意只有键)进行计数值加一。
因此weakMap、weakSet的内部是不稳定的,不可预知何时数据会由于外界的垃圾回收而发生改变,因为只要键名所关联的地址被回收,weakMap所建立的键值对就会断裂,因此values、entries、size三个属性都是不稳定的。
而使用weakMap、weakSet这两个数据类型则不会对添加的键(注意只有键)进行计数值加一。
因此weakMap、weakSet的内部是不稳定的,不可预知何时数据会由于外界的垃圾回收而发生改变,因为只要键名所关联的地址被回收,weakMap所建立的键值对就会断裂,因此values、entries、size三个属性都是不稳定的。
展开
9
13
![[发怒]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_12.0f24f23.png)