Javascript 闭包和垃圾收集:从链表中删除连续节点的最有效方法

Javascript 闭包和垃圾收集:从链表中删除连续节点的最有效方法,javascript,garbage-collection,linked-list,nodes,Javascript,Garbage Collection,Linked List,Nodes,我为javascript编写了一个快速而肮脏的双链表实现。我希望能够一次删除多个(连续的)节点,我想知道:仅仅断开我要删除的这些最外层节点的末端就足够了,还是必须单独删除每个节点。如果我正确理解javascript的垃圾收集,那么一旦没有任何东西指向那些连续的节点,即使它们仍然彼此连接,它们也应该由垃圾收集器处理,对吗? 如果有人能告诉我如何亲自测试或验证,我也将非常感激。根据: 从2012年起,所有现代浏览器都会提供一个标记和清除垃圾收集器。过去几年在JavaScript垃圾收集(分代/增量/

我为javascript编写了一个快速而肮脏的双链表实现。我希望能够一次删除多个(连续的)节点,我想知道:仅仅断开我要删除的这些最外层节点的末端就足够了,还是必须单独删除每个节点。如果我正确理解javascript的垃圾收集,那么一旦没有任何东西指向那些连续的节点,即使它们仍然彼此连接,它们也应该由垃圾收集器处理,对吗? 如果有人能告诉我如何亲自测试或验证,我也将非常感激。

根据:

从2012年起,所有现代浏览器都会提供一个标记和清除垃圾收集器。过去几年在JavaScript垃圾收集(分代/增量/并发/并行垃圾收集)领域所做的所有改进都是对该算法的实现改进,但不是对垃圾收集算法本身的改进,也不是对何时定义的减少“不再需要对象”

标记和扫描算法从根对象开始,找到所有可访问的对象,然后收集所有不可访问的对象,因此对于这些浏览器,断开节点就可以了。较旧的浏览器使用引用计数,这意味着对象只有在引用为0时才被收集,因此在这种情况下,双链接列表的循环将有问题。然后需要以某种方式在连续节点中剪切循环(将引用设置为null、delete关键字等)


因此,如果您正在为moden浏览器开发,您都很好,但是如果您想恢复与IE6/7等浏览器的兼容性,您需要一个稍微复杂一些的解决方案(这一直是一种方式,不是吗…)

谢谢!链接也很好。