3

我有一個網絡應用程序,定期輪詢數據到第三方服務(如Facebook,Twitter等)。 此投票/請求通過JSONP完成(以避免跨域問題)。在JavaScript中調用/執行後,是否需要刪除回調函數?

例如,一個簡單的要求會是這樣的:

function jsonp_callback() { 
    // Do something 
} 

var url = 'http://some.service.com/getresult?callback=jsonp_callback'; 
$http.jsonp(url); 

然而,因爲可以有另一種類型的請求,可以在任何時候進行(例如:發送或發佈更新),我創建了一個包裝來處理回調。

的實現是這樣的:

// Callback handler 
var myCb = (function() { 
    var F = function() {}; 
    F.prototype.fn = {}; 
    F.prototype.create = function(fn, scope) { 
     var self = this; 
     var id = new Date().getTime(); 
     self.fn[id] = function() { 
      if (typeof fn === 'function') { 
       fn.call(scope); 
      } 
     } 
     return 'myCb.fn.' + id; 
    } 
    return new F(); 
})(); 

// JSONP request 
var cb = myCb.create(function() { 
    // Do something 
}); 
var url = 'http://some.service.com/getresult?callback=' + cb; 
$http.jsonp(url); 

如果你注意到,一段時間後,該myCb.fn將臃腫會說是舊的或已經執行的回調。 問題是,我是否需要創建一個機制來垃圾收集那些已經被執行和不再需要的人?

回答

4

你不一定需要刪除舊的回調,如果你只會讓每頁幾個電話,但如果你的網頁是一個長期運行的一個,並調用反覆它可能是一個好主意,將其刪除。

的 「機制」 可能是這麼簡單

delete self.fn[id]; 

調用該函數後。

+0

是的,謝謝你的評論。我確實在當前的代碼庫中刪除了它們。我只是在尋找驗證,如果真的有必要,或者他們會在一段時間後自動被瀏覽器垃圾回收。 乾杯隊友! – Goni

+2

只要你持有對他們的引用,他們就不會被垃圾收集。 'delete'刪除允許垃圾回收器最終刪除函數的引用。 –