1

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

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

一旦我们分配

element.onclick = null; 

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

4

1 回答 1

2

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

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

element保持对闭包的引用,并且闭包对element.

现在,如果您设置elementnull,您通常会期望它被垃圾收集,因为它似乎不再引用它了。但是,这不会发生,因为闭包实际上仍在引用它,因此会造成内存泄漏。

如样式指南中所述,解决方案是确保闭包不保留对element.

于 2014-01-28T04:56:41.480 回答