vivatoviva / Interview-Frontend-2020

欢迎star、在对应的ussues沉淀知识
17 stars 2 forks source link

介绍下 Set、Map、WeakSet 和 WeakMap 的区别? #26

Open vivatoviva opened 5 years ago

vivatoviva commented 5 years ago

具体链接

这里谈下自己的理解:

weak翻译过来是一种弱,这和js垃圾回收计数有着很深的渊源,因为js垃圾会回收依靠的引用计数,当一个对象的引用数量为0才能将这个对象清除,这种和Set和Map有什么关系,这里要提到数组和对象,数组和对象如果其中引用一个对象,那个这个对象在垃圾回收阶段将不能不回收,这种就很容易引起内存泄漏,但是使用weak就有一个好处,就是不存在对对象的实质引用,也就是不论weakSet或者weapMap中引用这个对象,垃圾回收机制都可以将这个对象回收,因为垃圾回收依赖的是引用计数,而weak类型中对象不会影响这个对象的引用计数,这也就要求weakMap和weakSet中只能存在对象,这样两种类型才能起到实质的作用;