嘿,我讀過Google文章(here),我們在使用閉包時需要小心。
例如,他們給有此功能:JavaScript的最佳實踐,使用閉包
function foo(element, a, b) {
element.onclick = function() { /* uses a and b */ };
}
我引述:
功能關閉保持到元素的引用,a和b即使它永遠不會使用的元素。由於元素也保留了對閉包的引用,所以我們有一個循環不會被垃圾回收清理。
而且我還讀到一篇文章在module pattern
,並且有大量的使用在封閉
例如,如果我宣佈一個這樣的模塊:
(function() {
var a = function() { };
var b = function() { };
}());
所以b
訪問到a
,這意味着它也保存對模塊上聲明的所有函數的引用。
它也被認爲是不好的做法?
這是一個比代碼特定的問題更多的討論。順便提一下,友好提示:reAd,而不是紅色:) – Utkanos
@Utkanos - 實際上,我認爲這是一個代碼特定的問題,儘管我沒有足夠深入的JavaScript知識來回答它。我相信這個引用表明函數sans參數持有對整個封閉範圍的引用。這是否確實阻止了GC(除了在引用計數模型中它不應該),或者是否可以通過將'a'和'b'顯式傳遞給內函數來避免無意的引用,(我相信)這裏真正的問題。 – kdgregory