Javascript js中树对象实现的内存管理

Javascript js中树对象实现的内存管理,javascript,memory-management,garbage-collection,quadtree,Javascript,Memory Management,Garbage Collection,Quadtree,我试图实现一个四叉树,但我对clear函数有一个问题。 目前,每一步更新都会重新构建树,在此之前,我们必须清除当前结构 我看到了一些不同的实现,比如。 在clear方法中,我们将对象数组和子节点数组置零 递归地(array.length=0) 为什么??如果我们简单地使根节点为空,垃圾收集器的行为是否不同?('因为子节点不能再访问了)还是'只是为了确定'的问题? 谢谢 Javascript中的对象通过“引用副本”传递 因此,即使将根节点置为空,子节点也不再可以轻松访问,但可能在某个地方存在对它的

我试图实现一个四叉树,但我对clear函数有一个问题。
目前,每一步更新都会重新构建树,在此之前,我们必须清除当前结构

我看到了一些不同的实现,比如。 在clear方法中,我们将对象数组和子节点数组置零 递归地
(array.length=0)

为什么??如果我们简单地使根节点为空,垃圾收集器的行为是否不同?('因为子节点不能再访问了)还是'只是为了确定'的问题?


谢谢

Javascript中的对象通过“引用副本”传递

因此,即使将根节点置为空,子节点也不再可以轻松访问,但可能在某个地方存在对它的引用,因此它们保留在内存中

简单的例子:

var o = {
    c: {
        a: true
    }
};

var reference_to_c = o.c;
o = null; // just removes reference

console.log(reference_to_c); // Object {a: true}
编辑: 关于
array.length=0:David Walsh解释说,为什么使用这种方式删除元素不涉及内存问题和空指针


希望能有所帮助。

但我看到JavaScript对象(和原语)在无法访问时会被垃圾收集。因此,在您的示例中,c不会被收集,因为reference_to_c,如果我们将reference_设置为_c=null,它将被收集。是吗?是的,我认为垃圾收集是这样工作的。我更新了答案,所以可能会有帮助。谢谢你的帮助!因此,如果我们遵循这个逻辑,递归清除(在我的示例中,子节点没有引用到它们的父节点)的兴趣是什么?我认为这更重要的是从父节点到子节点和兄弟节点删除ref,并确保垃圾收集器将为每个节点递归地收集它们正在做的所有事情。很可能这是“只是为了确定”的问题。@Bergi-我刚刚注意到pdf页脚有“失效文档”的注释。我的错!关于记忆——我的意思是,如果我们在某个地方引用了一个变量,它就不会被收集。我试着用例子来说明这一点。答案已编辑。在我看来就像“只是为了确定”。好的!我将在测试后很快更新主题。谢谢