为什么Google声称Javascript关闭是危险的?

时间:2014-01-28 04:46:37

标签: javascript closures language-theory

我刚刚阅读了Google JS样式指南的这一点: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures

我并不完全理解它。虽然element.onclick具有分配给它的功能,但一切都很好。没有什么是垃圾收集,但这没关系,因为我们仍在使用这些对象。

我们分配后

element.onclick = null; 

然后关闭将被垃圾收集,因为元素不再指向它。问题出在哪里?

1 个答案:

答案 0 :(得分:1)

他们的观点是在这段代码中:

function foo(element, a, b) {
   element.onclick = function() { /* uses a and b */ };
}

element保留对闭包的引用,闭包引用element

现在,如果您将element设置为null,您通常会认为它是垃圾收集的,因为它似乎什么都没有引用它。然而,由于闭包实际上仍然引用它,因此不会发生这种情况,因此会造成内存泄漏。

样式指南中提到的解决方案是确保闭包不会引用element