强引用和弱引用

2022-07-03  本文已影响0人  skoll

强引用

1 .将对象保存在内存之中的引用,会防止垃圾回收

let cat={name:"kitty"}
//创建一个cat对象
const pets=[cat]
//把这个对象放入到一个数组里面
const petObj={value:cat}
//把这个对象放到一个对象里面
cat=null
console.log(cats)
//[name:"kitty"]
console.log(catObjs)
image.png

//可以看到cat虽然变成了null,但是在arr,obj里面都是正常显示的

//虽然我们再也无法访问cat变量,但是由于pets数组和这个对象之间存在强引用关系,因此这个对象其实任然保存在内存中.可以通过pets[0]访问到他
2 .强引用可以防止垃圾回收从内存中删除对象.除非我们主动把这个对象设为null

弱引用

1 .对对象的引用,但是不被使用,会被垃圾回收机制所清除

let pets=new WeakMap()
    let cat={name:"kitty"}
    pets.set(cat,"kitty")
    console.log(pets)

    cat=null
    console.log(pets)
image.png

//看到竟然是没变化,下面不是说设为null会触发垃圾回收么?

2 .为避免内存泄漏,一旦数据不再使用,最好通过将其值设为null来释放其引用,这个方法叫做接触引用.也就是说定义为null会触发一次垃圾回收
3 .一个对象若只被弱引用所引用,则被认为是不可访问的,因此可以再任何时候被回收。这里的不能访问描述有点错误。官方文档是不能循环,没有自己的遍历方法
4 .这里他们是看的node才看出来了

总结

默认情况下,JavaScript 对其所有引用使用强引用,使用弱引用的唯一方法是使用 WeakMap 或 WeakSet

上一篇 下一篇

猜你喜欢

热点阅读