Java教程

JavaScript的强引用和弱引用

本文主要是介绍JavaScript的强引用和弱引用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

一、什么是强引用

二、弱引用

三、强引用和弱引用相比


一、什么是强引用

强引用是指向内存申请一段存储空间,进行存储的引用类型的对象的引用,在对象获得的分配内存空间中不仅仅存放了对象的信息,还存放着该对象被引用的次数。

我们常见的普通对象的引用 例如Object obj = new Object();

var  obj = new Object();
obj = 10;

二、弱引用

弱引用一旦被垃圾回收器检测到,就会被回收。

新的weakSet和WeakMap中,表示存储的对象值/键名所引用的对象都是被弱引用的

以WeakMap为例

let obj = { name: 'toto' }
let weakmapObj = new WeakMap()
weakmapObj.set(obj, 'any value')

obj = null
weakmapObj .size() // 0

对象被垃圾回收器删除,因为weakmap在对象{ name: ‘toto’ }上只有弱引用,而这个对象已经没有强引用了。(只有变量obj有保持引用)

三、强引用和弱引用相比

二者相比,有一个广为流传非常形象的比喻:

强引用就是一个小孩A牵着一条狗,他们之间通过狗链儿连着

弱引用就是,旁边有个小孩B指着A牵的狗,说:嘿,那有条狗,B指向那条狗,但他们之间没有是指绑在一起的东西

当A放开狗链,狗就会跑掉(被垃圾回收),无论B是不是还指着

但是,当B不再指着那条狗,狗还被A牵着,不会影响它是否跑掉

 简单来说:强引用的不会被垃圾回收机制回收了,但是 弱引用可是会回收的 ;弱引用 并不会屏蔽 垃圾回收机制

这篇关于JavaScript的强引用和弱引用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!