我一直不確定關於閉包JS JS垃圾收集的規則一段時間,所以我想我可能會問...這是一個很好的例子,我很好奇涉及jQuery的$.each
方法:關閉垃圾收集的混亂
storeSelection: function() {
var enabledIds = {};
$.each(this.nodes, function(index, node) {
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
this.selection = enabledIds;
}
上面的這段是,當然,對象文本的一部分。所以,我在外層函數的頂部創建了一個新對象,它將存儲數組中已啓用項的ID。使用jQuery的.each()
方法,我循環訪問項目數組並記錄啓用ID。最後,我將選擇存儲爲父對象的成員。
我的問題涉及內部函數,它引用外部作用域中的enabledIds
對象。由於enabledIds
會滯留,是否阻止內部功能被收集?我會假設沒有,因爲它只是一個在內部函數結束時被清除的變量,對吧?要成爲一個漏洞,我認爲內在功能都需要進行硬參考外部對象,如:
$.each(this.nodes, function(index, node) {
this.badIdea = enabledIds;
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
但是...我一直在這條規則有霧。任何幫助消除這種混亂將不勝感激!