WeakMap 会不会让我免于 parent / child 关系的内存泄漏?

Will WeakMap save me from memory leak for parent / child relationship?

我有一个 parent / child 关系,看起来像这样。

parent.children = [child];
child.parent = parent;
  1. 当删除所有其他对 parentchild 的引用时,这会导致内存泄漏吗?只有剩下的引用才会被彼此引用。

  2. 如果会因为循环引用导致内存泄漏,WeakMap救救我吗?

使用WeakMap,

var parentMap = new WeakMap();
parent.children = [child];
parentMap.set(child, parent);

我猜不会,因为 parentMap 引用了 parentparent 引用了 child。还是有循环引用。

没有。如果您删除对 parentchild 的所有其他引用,它们将被垃圾回收。 所有现代浏览器都使用 mark-and-sweep 算法进行垃圾回收,循环不是问题。 您不需要使用 WeakMap(无论如何它不会帮助您)。

但是,显然,如果对 parentchild 的引用仍然存在于某处,则其中的 none 将会消失。