2011-05-11 70 views
0

ajax請求後,你可以通過這樣做釋放內存嗎?ajax請求後釋放內存

function Ajax(){ 
    this.url = null; 
    this.data = null; 
    this.success = null; 

    this.global = true; 
    this.timeout = JSON_TIMEOUT; 
    this.cache = false; 
    this.dataType = 'json'; 
    this.type = 'post'; 

    var _this = this; 

    this.send = function(){ 
     var jqxhr = $.ajax({ 
       url : this.url, 
       data : this.data, 
       timeout : this.timeout, 
       cache : this.cache, 
       dataType : this.dataType, 
       type : this.type, 
       global : this.global 
       } 
      ) 
      .success(this.success) 
      .error(function(){ 
       Dialog.set_error({ 
        headline : Lang.get('HDL_ERROR'), 
        body : Lang.get('ERR_TIMEOUT'), 
        btns : [ 
         { 
          value : Lang.get('BTN_OK'), 
          script : function(){}, 
          focus : true 
          } 
         ] 
        }) 
       }) 
      .complete(function(){ 
        delete _this; 
       }); 
    }; 
} 
+1

JavaScript是內存管理的。你爲什麼想要自己「釋放」記憶? – Tomalak 2011-05-11 09:10:36

回答

3

編號delete不釋放內存,它從對象中刪除屬性。如果你打電話給var(正如你所做的那樣),它不起作用。

JavaScript是垃圾收集語言。當沒有任何對該對象的引用時,對象消耗的內存會自動回收。自動處理循環參考(所以即使A參考BB參考A,沒有提供任何其他其他參考AB,它們都可以回收)。

在某些瀏覽器上(我在看你,Microsoft),遇到問題的地方是帶有非JavaScript對象的循環引用。如果你有一個引用一個對象(比如一個函數)的DOM元素,並且該對象也引用DOM元素,那麼即使沒有其他東西引用這些對象,它們也永遠不會被回收。但你的例子似乎不是這種情況。我重複了上述關於delete的聲明:如果碰巧你從對象中移除的屬性指的是一個沒有別的東西指向的對象,那麼移除該屬性使對象可以被回收。但是,這是一個副作用,並且delete僅與屬性有關,而不是變量。)

2

JavaScript運行其自己的垃圾回收器。這意味着你不需要(也無法)對此做任何事情。

This answer加深你的好奇心。