You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何secondList变量的值未被清除?JavaScript引用类型疑问

为什么secondList变量的值没有被清除?

先看你给出的原始代码:

let list = {
  value: 1,
  next: {
    value: 2,
    next: {
      value: 3,
      next: {
        value: 4,
        next: null
      }
    }
  }
};

执行下面两段代码后,secondList并没有被清除:

let secondList = list.next.next;
list.next.next = null;

原因很简单——JavaScript里的对象是引用类型,变量存的不是对象本身,而是指向对象内存位置的引用地址:

  • 执行let secondList = list.next.next;时,secondList复制了list.next.next当时的引用地址,两者指向内存中同一个{value:3, next:{...}}对象。
  • 而list.next.next = null;只是把list.next的next属性值(也就是那个引用地址)替换成了null,并没有删除原来的对象,也没改变secondList存储的引用地址。

打个比方:你和朋友各持一把同一间房的钥匙(引用地址),你把自己的钥匙换成了废钥匙(设为null),但朋友手里的钥匙还是能打开那间房,房子本身根本没被拆掉。只要还有变量持有对象的引用,这个对象就不会被垃圾回收机制清理,secondList自然还能访问它。

内容的提问来源于stack exchange,提问作者Pavlo Zalutskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:10:25