销毁typescript中的循环引用实例?

销毁typescript中的循环引用实例?,typescript,memory-leaks,circular-reference,Typescript,Memory Leaks,Circular Reference,假设我有如下代码: class A { b: B; constructor() { this.b = new B(this); } } class B { a: A; constructor(a: A) { this.a = a; } } let a= new A() 当我要销毁某个实例时: 1我应该 a=null; 或 ? 2有没有办法编写代码来测试结果?说一些代码来检测内存中某个类的实例号?如果没有对a或

假设我有如下代码:

class A {
    b: B;
    constructor() {
        this.b = new B(this);
    }
}

class B {
    a: A;
    constructor(a: A) {
        this.a = a;
    }
}
let a= new A()
当我要销毁某个实例时:

1我应该

a=null; 

?


2有没有办法编写代码来测试结果?说一些代码来检测内存中某个类的实例号?

如果没有对a或b的引用,它将被垃圾收集器标记为不可访问,并一起清理,您不必手动执行任何操作


您可以在javascript中找到关于垃圾收集器工作原理的更多信息。

如果没有对a或b的引用,垃圾收集器会将其标记为无法访问并一起清理,您不必做任何事情。@toskv因此,如果只有对a的引用,当我使用
a=null
时。即使a和b是循环引用的,b也会自动被gc引用?是的,只要其他人没有对它们的引用。您可以在MDN页面上了解有关javascript垃圾收集的更多信息。请记住,实际实现可能会有所不同。在上面的示例中,DOM元素“myDivElement”在“circularReference”属性中有一个对自身的循环引用。如果属性未显式删除或为空,则引用计数垃圾收集器将始终至少保留一个完整的引用,并将DOM元素保留在内存中,即使它已从DOM树中删除。如果DOM元素包含大量数据(如上面的示例所示,带有“lotsOfData”属性),则该数据所消耗的内存将永远不会被释放。这是您发送的链接中的一句话,您确定它能像您所说的那样工作吗?我认为文件中的解释是vague@Esqarrouth没有JS引擎使用引用计数。即使是IE6和IE7(它们已经死了很久了!)也只有在DOM对象参与循环时才会出现问题。
a.b.a=null;
a=null;