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