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

Node.js输出<ref *1>含义及BinarySearchTree循环引用问题如何解决

问题解答

1. <ref *1>标识的含义

这个是Node.js控制台输出对象时的循环引用标记机制:

  • Node.js打印嵌套对象时,为了避免循环引用导致无限递归输出、控制台卡死,会给每个出现过的对象分配唯一的引用ID,用<ref *ID>的形式标记在对象第一次出现的位置
  • 后续如果同一个对象被其他属性引用,就会用[Circular *ID]指代,说明这个位置的属性指向的就是前面ID对应标记的对象,形成了循环引用
    你输出里的<ref *1> BinarySearchTree { tree: [Circular *1] }就说明:这个BinarySearchTree实例被标记为引用1,它的tree属性又指向了它自己,形成了循环。

2. 出现该问题的原因

你的代码逻辑存在传参错误,导致意外生成了循环引用:

  • 你封装的addNode方法设计初衷是接收**树节点对象(带number属性的普通对象)**作为根节点,给它添加子节点后返回该根节点
  • 但你在insert方法中调用addNode时,第一个参数传的是this(也就是BinarySearchTree类的实例),执行完addNode后又把返回的实例赋值给了this.tree,最终就形成了实例.tree = 实例的循环引用结构

3. 修复方案

只需要修改insert方法的调用逻辑,给addNode传入正确的根节点this.tree,同时不需要额外赋值(因为对象是引用传递,addNode会直接修改原树节点):

insert(nums) {
  if (typeof nums === "number") {
    addNode(this.tree, nums);
    return;
  }
  for (let number of nums) {
    addNode(this.tree, number);
  }
}

修复后再次执行打印console.log(lolTree.tree),就会输出正确的二叉搜索树结构,不会再出现循环引用和<ref *1>标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:02