WeakSet和WeakMap

WeakSet

WeakSet和Set都是不重复的值的集合。
WeakSet和Set有两点不一样。
一、WeakSet的成员只能是对象,Set的成员不只能够是对象还能够是其余类型的值。
clipboard.png函数

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

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

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

WeakSet没有size属性,也没有办法遍历其成员。
有三个操做方法:
add(value),delete(value),has(value)事件

WeakSet不能遍历的一个缘由是:全部成员都是弱引用,随时可能消失,遍历机制没法保证成员存在,可能刚遍历结束,成员就取不到了。
WeakSet的一个最大的用处是:存储DOM结点,不用担忧这些这些节点从文档中删除,引起内容泄露。ip

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);
相关文章
相关标签/搜索