我刚刚阅读了Google JS样式指南的这一点: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures
我并不完全理解它。虽然element.onclick具有分配给它的功能,但一切都很好。没有什么是垃圾收集,但这没关系,因为我们仍在使用这些对象。
我们分配后
element.onclick = null;
然后关闭将被垃圾收集,因为元素不再指向它。问题出在哪里?
答案 0 :(得分:1)
他们的观点是在这段代码中:
function foo(element, a, b) {
element.onclick = function() { /* uses a and b */ };
}
element
保留对闭包的引用,闭包引用element
。
现在,如果您将element
设置为null
,您通常会认为它是垃圾收集的,因为它似乎什么都没有引用它。然而,由于闭包实际上仍然引用它,因此不会发生这种情况,因此会造成内存泄漏。
样式指南中提到的解决方案是确保闭包不会引用element
。