0

当您使用Node.removeChild()它时,将删除的节点返回给您。然后,如果需要,您可以再次将其附加到您的 DOM 上。因此,从逻辑上讲,它保留在内存中以使其成为可能。您可以在http://jsfiddle.net/6QtjD/上查看。

我的疑问是:如果我删除了太多节点,将删除的节点设置为本地 var,它会一直保留在内存中,直到页面更改或范围结束?

例如:如果我创建 1000 个节点并删除所有节点,每 0.1 秒。在 10 秒内,我的页面将使用 100.000 个节点的内存空间吗?

function create1000() {
    var div, i;

    for(i=0; i<1000; i++) {
        div = document.createElement("div");
        div.innerText = i;
        document.body.appendChild(div);
        document.body.removeChild(div); 
    }
}

for(var i=0; i<10000; i+=100)
    setTimeout(create1000, i);

谢谢!

4

2 回答 2

2

没有理由它应该,因为你没有抓住它,所以它应该是可收藏的。

多年来,不同浏览器的 js 实现中肯定存在各种泄漏,但除非我看到明确的证据,否则我不会担心这种情况(并且获得明确的证据,我会自己尝试)。

于 2012-09-03T01:03:51.893 回答
1

当您甚至没有捕获 document.body.removeChild() 的返回值时,您可以 99.9% 确定 javascript 实现将丢弃它并且不会将其保存在内存中,即使无法保证无法访问它。0.1% 的怀疑是因为这是浏览器 javascript 引擎的内部细节,你不能确定地球上不存在在这种情况下泄漏内存的浏览器。

于 2012-09-03T01:11:32.497 回答