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將臃腫會說是舊的或已經執行的回調。 問題是,我是否需要創建一個機制來垃圾收集那些已經被執行和不再需要的人?
是的,謝謝你的評論。我確實在當前的代碼庫中刪除了它們。我只是在尋找驗證,如果真的有必要,或者他們會在一段時間後自動被瀏覽器垃圾回收。 乾杯隊友! – Goni
只要你持有對他們的引用,他們就不會被垃圾收集。 'delete'刪除允許垃圾回收器最終刪除函數的引用。 –