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

学习链表时遇对象循环问题:为何代码产生对象循环引用?

循环引用出现的原因解析

先看你代码里的核心逻辑:

const test2 = function (numb) {
  let obj1 = {
    a: 1,
    b: 2,
  };

  let obj2 = {
    d: numb,
    e: null,
  };
  let obj3 = obj2;
  obj3.b = obj2;
  console.log(obj3);
};
test2(3);

问题出在JavaScript对象的引用类型特性上:

  • 执行let obj3 = obj2;时,并没有复制出一个和obj2完全独立的新对象,而是让obj3和obj2指向内存里的同一个对象。就像两个人拿着同一扇门的钥匙,打开的都是同一个房间。
  • 接下来obj3.b = obj2;,本质是给这个共享的对象添加b属性,并且把属性值设为这个对象本身(因为obj2指向的就是这个对象)。

现在这个对象的结构变成了:

{
  d: 3,
  e: null,
  b: 这个对象本身
}

所以当你访问obj2.b时,得到的是对象自己;再访问obj2.b.b,还是这个对象,以此类推,就形成了你看到的连续循环引用。

你预期代码仅执行一次,应该是误以为obj3是独立的新对象,但实际上它只是原对象的一个引用,修改obj3的属性等同于直接修改obj2的属性。

内容的提问来源于stack exchange,提问作者Abdulaziz mohammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:00:55