我为JavaScript的双向链接列表编写了一个快速而肮脏的实现。我希望能够一次删除多个(连续的)节点,并且想知道:仅切断要删除的这些最外面的节点的末端是否足够,还是必须单独删除每个节点?如果我正确地理解了javascript的垃圾回收,那么即使连续的节点仍然相互连接,也没有任何东西可以指向这些连续的节点,那么垃圾回收器应该对它们进行处理,对吗?
如果有人能告诉我我自己如何进行测试或验证,我也将不胜感激。

最佳答案

根据MDN:



标记和清除算法从根对象开始,找到所有可到达的对象,然后收集所有不可到达的对象,因此对于这些浏览器,将节点分开就可以了。较旧的浏览器使用引用计数,这意味着仅在对象具有0个引用时才收集对象,因此在这种情况下,双链表的循环会出现问题。然后,您需要以某种方式削减连续节点中的循环(将引用设置为null,delete关键字,依此类推)。

因此,如果您正在开发现代浏览器,那么一切都很好,但是如果您想向后兼容IE6/7之类的浏览器,则需要一个稍微复杂的解决方案(这一直都是这样,不是吗?)

关于javascript - 关闭和垃圾回收: most efficient way to remove consecutive nodes from a linked list,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13783776/

10-09 16:18