博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WeakSet和WeakMap
阅读量:6436 次
发布时间:2019-06-23

本文共 991 字,大约阅读时间需要 3 分钟。

WeakSet

WeakSet和Set都是不重复的值的集合。

WeakSet和Set有两点不同。
1、WeakSet的成员只能是对象,Set的成员不仅可以是对象还可以是其他类型的值。
clipboard.png

2、WeakSet中的对象都是弱引用,垃圾回收机制不考虑WeakSet对该对象的引用,即,如果其他对象不再引用该对象,垃圾回收机制会自动回收该对象所占用的内容,不用考虑该对象是否还存在于WeakSet中。

垃圾回收:

垃圾回收机制是依赖引用计数,如果一个值的引用次数不为0,垃圾回收机制是不会释放这块内存的。

当结束使用该值之后,如果忘记取消引用,会导致内存无法释放,进而可能引发内存泄漏。而WeakSet永远,不会出现内存泄漏的问题。因为WeakSet里面的引用是不计入垃圾回收机制的。WeakSet适合临时存放一组对象,以及存放跟对象绑定的信息。只要对象在外部消失,它在WeakSet里面的引用就会自动消失。

WeakSet没有size属性,也没有办法遍历其成员。

有三个操作方法:
add(value),delete(value),has(value)

WeakSet不能遍历的一个原因是:所有成员都是弱引用,随时可能消失,遍历机制无法保证成员存在,可能刚遍历结束,成员就取不到了。

WeakSet的一个最大的用处是:存储DOM结点,不用担心这些这些节点从文档中删除,引发内容泄露。

WeakMap

WeakMap和WeakSet相似,只要外部引用消失,WeakMap内部的引用就会自动被垃圾回收清除。

WeakMap日常最大的应用:(注册监听事件的listener对象很适合用WeakMap实现)
因为将监听函数放在WeakMap中,一旦DOM对象消失,与它绑定的监听函数也会自动消失。

let myElement = document.getElementById('logo');let myWeakmap = new WeakMap();myWeakmap.set(myElement,{timesClicked:0});myElement.addEventListener('click',function(){    let logoData = myWeakmap.get(myElement);    logoData.timesClicked++;    },false);

转载地址:http://sahga.baihongyu.com/

你可能感兴趣的文章
Ixia张林辉:测试系统让SDN更“迷人”
查看>>
IBM致梁允超:乘着新技术东风 SaaS100+让汤臣“倍”加健壮
查看>>
大数据,大格局,大发展
查看>>
蒙克:云计算安全问题被夸大
查看>>
中国人工智能学会通讯——最优传输理论在机器学习中的应用 1.1 最优传输理论与 WGAN 模型...
查看>>
WD强势出击 推出全球业界首款2TB硬盘
查看>>
外媒:为何说中国对美国科技行业的影响与日俱增
查看>>
2016云栖大会马云畅谈未来五大创新趋势
查看>>
数据中心机房设计及各专业技术平衡
查看>>
如何在Linux下安装PyCharm
查看>>
收集Java面试题知识点(Java基础部分三)
查看>>
全新WiFi技术问世 更适合智能家庭和物联网
查看>>
开机慢 不换SSD如何提升Windows 10开机速度
查看>>
Android键盘面板冲突 布局闪动处理方案
查看>>
阿里云E-MapReduce 创建执行计划
查看>>
数据中心里的应急关机技术
查看>>
偏见为什么是数据科学领域的一个大问题
查看>>
SAS实现四十年连续增长,2015年全球营收达31.6亿美元
查看>>
日本社交餐厅评论服务平台Retty获1050万美元D轮融资
查看>>
未来两年内的九大信息安全威胁(三)
查看>>