Esq*_*uth 1 javascript siblings circular-reference node.js typescript
在这样的语言中C#这不是问题,但是这会导致很难找到其他语言的内存错误。我可以在中使用以下代码,Typescript还是可以Javascript相信一切都会好起来吗?
class Dad {
kids: Kid[];
}
class Kid {
dad: Dad;
siblings: Kid[];
}
let anakin: Dad | undefined;
function makeKids(dad: Dad) {
const luke = new Kid();
const leia = new Kid();
luke.dad = dad;
leia.dad = dad;
luke.siblings = [leia];
leia.siblings = [luke];
dad.kids = [luke, leia];
}
anakin = new Dad();
makeKids(anakin);
console.log(anakin.kids.length); // Prints out 2
anakin = undefined;
// I expect luke and leia to die at this point
// Not float around the memory space infinitely
Run Code Online (Sandbox Code Playgroud)
还是我应该使孩子和兄弟姐妹变量可选,并添加一个destructor?像这样:
kids?: Kid[];
siblings?: Kid[];
destructor() {
this.kids = undefined
}
Run Code Online (Sandbox Code Playgroud)
这是一个相关的主题,我对答案不满意:销毁打字稿中的循环引用实例?
TypeScript没有运行时。
JavaScript有许多运行时,因此不可能说所有这些运行时都适用,但是所有主要运行时(流行浏览器中附带的运行时,node.js)都能够轻松处理断开的循环引用。
JS中有一个定义明确的内存根,通过它可以很容易地进行标记扫掠GC,在处理循环引用时没有问题。循环引用实际上只是引用计数的GC系统中的一个问题,由于您不需要确定性的清理,因此没有充分的理由使用JS语言进行引用计数。
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |