2014-01-28 56 views
0

我剛剛讀了這一點谷歌JS風格指南: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Closures#Closures爲什麼Google聲稱Javascript關閉是危險的?

我不完全理解它。雖然element.onclick有分配給它的功能,但一切都很好。沒有什麼是垃圾收集,但沒關係,因爲我們仍在使用這些對象。

一旦我們分配

element.onclick = null; 

然後關閉將收集要素不再指向它的垃圾。問題在哪裏?

+2

該建議(涉及DOM元素的循環引用)基於多年前的錯誤瀏覽器。但是,不要將資源與不必要的關閉捆綁在一起,這仍然是一個好策略。所引用的文章不會說「危險」,只是「小心」。 – RobG

回答

1

他們正在的要點是,在這樣的代碼:

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

element保持一個參考閉合,和封閉到element的參考。

現在,如果您將element設置爲null,您通常會認爲它是垃圾回收,因爲它沒有再引用它了。然而這不會發生,因爲閉包實際上仍然引用它,所以會造成內存泄漏。

正如樣式指南中所述,解決方案是確保封閉不會保留對element的引用。

+0

「將'element'設置爲'null'」是什麼意思? –