此概念与JS垃圾回收机制紧密相关:内容待审核
一. 前言
在垃圾回收中,所有东西都是围绕着引用这一概念展开的。引用分为两类,弱引用和强引用,而日常所提到的引用一般都是指强引用。
二. 概念
强引用:强引用的对象资源永远不会被垃圾回收
弱引用:无法阻止弱引用的对象资源被垃圾回收
三. 范例
概念非常绕,以下图为例。
图1图2展示了同时存在强弱引用和仅存在弱引用的两种情况,图中实线表示强引用,虚线表示弱引用。
在图1的状态下,变量a,b都能通过引用访问ObjectA,并且由于变量a对ObjectA存在强引用,ObjectA永远都不会被垃圾回收。
但在图2的情况下,对象ObjectA仅有来自于变量b的弱引用,而弱引用是无法阻止他所引用的对象被垃圾回收的,因此对象ObjectA会被垃圾回收,而变量b会指向undefined。
四. 范例(卡通展示)
可以打一个比方,如下图所示,人物对应的是变量,狗对应的是对象。
强引用相当于人物(变量)和狗(对象)之间栓了一个铁链,弱引用则相当于人物用手指着这条狗,在铁链一直存在的时候,两个人物一直都能看到这条狗(通过引用访问)。而当这条铁链断掉(强引用消失)之后,狗就会跑开(垃圾回收),而指着这条狗的人物(弱引用)并没有办法阻止这条狗的离去,最后会指向空气(undefined)。