[英]Where is the memory leak coming from?
我正在使用舊版本的extjs調試我的js代碼。 我在代碼中撥打了電話:
Ext.History.add("text");
內部Ext.History是這樣實現的:
Ext.History = (function () {/* code goes here. */ })();
問題是調用Ext.History.add()會導致IE上的內存泄漏。 因此, 假設我可能想停止使用外殼並執行以下操作:
function History () {
/* code */
}
Ext.History = History;
但這會導致錯誤。
編輯:錯誤來自歷史對象內部的add方法。
您有什么證據證明內存泄漏? 大部分問題已在IE中修復,這無疑已經不是幾年來的熱門話題。 IE 6和早期IE 7在涉及DOM對象的循環引用方面存在問題,但即使在那些較舊的版本中,它們也已得到修復。
無論如何,以下內容:
> Ext.History = (function () {/* code goes here. */ })();
右側立即調用的函數表達式(IIFE)僅對外部作用域具有封閉性(這似乎是通用代碼)。 您沒有顯示任何有問題的閉包在哪里,因此很難評論。
大概IIFE返回帶有add屬性的對象,該對象是一個函數,並且該函數對IIFE中聲明的變量具有閉包,例如
Ext.History = (function () {
var foo = 'foo';
return {
add: function(bar) {
return foo + ' ' + bar;
}
}
})();
您可能可以用對象和直接屬性替換整個對象,例如,以下內容與上面的內容相同,只是它訪問歷史記錄的屬性而不是閉包:
Ext.History = {
foo: 'foo',
add: function (bar) {
return this.foo + ' ' + bar;
}
};
請注意, add的此值必須是History (例如,將其稱為Ext.History.add()
),否則它將無法正常工作。 同樣,名稱與當前屬性相同的變量需要重新命名。
如果發布整個代碼(或顯示模式的合理塊),則可能可以修復。 或者,查看新版本,看看他們做了什么來解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.