JavaScript class 字段引用和垃圾收集

JavaScript class field references and garbage collection

我实现了一个 class,可用于实例化传递给访问者函数的对象,该访问者函数检测 JSON 文档中的重复键。我要解决的问题是检测 JSON 文档中的重复键。更具体地说,我想检测同一嵌套级别的重复项,从现在开始我将其称为上下文。

我实现的class有2个字段:

我的问题如下:

当我将它们从堆栈中弹出时,是否需要从它们可能持有的键的引用中清除 Set?换句话说,discarded?.clear() 调用是否必要,因为集合包含对已访问键的字符串引用?

我知道集合引用本身会丢失,但我想知道集合持有的引用(对 json 文档中访问的键)

class DetectDuplicates {
  stack;
  visited;

  constructor() {
    this.stack = [];
    this.visited = new Set();
  }

  onObjectBegin() {
    this.stack.push(new Set());
    this.visitedKeys = this.stack[this.stack.length - 1];
  }

  onObjectEnd() {
    const discarded = this.stack.pop();
    // Is that necessary?
    discarded?.clear();
    this.visitedKeys = this.stack[this.stack.length - 1];
  }

}

Do I need to clear the Set from the references they might holds to the keys when I pop them out of the stack?

没有。如果 Set 实例未从其他任何地方引用,它将被垃圾收集,并将带走存储在其中的所有引用。