簡體   English   中英

內存泄漏來自哪里?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM