I've found that all of these scripts, while doing the same thing create memory leaks,问题是,为什么?
这似乎是因为循环引用。
<script>
function runme() {
var node = document.createElement("div");
node.onclick = function() {
node.style.background = "red";
}
document.body.appendChild(node);
}
</script>
或
<script>
function runme() {
var node = document.createElement("div");
node.onclick = function() {}
document.body.appendChild(node);
}
</script>
或
<script>
var node = document.createElement("div");
document.body.appendChild(node);
function runme() {
node.onclick = function() {}
}
</script>
或
<script>
var node = document.createElement("div");
node.onclick = empty;
document.body.appendChild(node);
function empty() {
}
</script>
答案 0 :(得分:0)
我不知道你是如何检测泄漏的,但对我来说,只有前两个例子会造成泄漏。(使用sIEve检测到)
原因:在runme()内部为节点创建一个闭包。
当您在所有4个示例中出现泄漏时,您应该显示如何删除节点(这是泄漏发生时的点)
但是:解决方案是在删除元素之前删除事件:http://www.crockford.com/javascript/memory/leak.html