当您使用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);
谢谢!
答案 0 :(得分:2)
没有理由,因为你没有抓住它,所以它应该是可收藏的。
多年来,不同浏览器的js实施中确实存在各种泄漏,但我不担心这种情况,除非我看到明确的证据(并且得到明确的证据,我会亲自尝试)
答案 1 :(得分:1)
当你甚至没有捕获document.body.removeChild()的返回值时,你可以99.9%肯定javascript实现将丢弃它并且不保留在内存中,即使有保证无法访问它。 0.1%的疑问是因为这是浏览器javascript引擎的内部细节,你不能确定地球上没有浏览器会在这种情况下泄漏内存。