许多程序员认为javascript关闭开始泄漏内存。
我想看一些发生这种情况的例子。
我不希望看到闭包被添加为事件到dom元素并删除IE中的dom元素。如下面的链接
function foo(value) {
var bar = document.getElementById("selector");
bar.attachEvent("onclick",
// closure
function() {
alert(value);
}
);
}
我想看看其他一些闭包可能会泄漏的情况。
答案 0 :(得分:3)
总结一下jAndy的链接(全部图片仍然在链接之后)。
关闭它们自我并不是一个大问题,只要关闭存在,当你不明白继承范围内的所有东西都继续存在时,就会出现问题。
function doAmazingGrace() {
// gigantic list of stuff!
var list = [...];
var result = magicComputationOnTheList();
// readOnlyResults for whatever reason....
return {
get: function() {
return result;
}
}
}
result
本身不是问题,因为它必须依赖才能使闭包起作用,但是list
将被“泄露”,除非你松开对闭包的引用它会去因此,从技术上讲,它不是泄漏。
但只要封闭存在,你就在那里保留对list
的引用,这是不需要的。
因此,为了解决这个问题,在返回对象之前使用delete list
或list = null
是明智的,这样可以对阵列进行垃圾回收。
第二个问题是循环引用,但这不是一个闭包问题,你总是可以引入循环引用,它们泄漏的时间和长度也取决于垃圾收集器摆脱它们的能力。 V8做得很好,旧的IE版本虽然存在极端问题。