javascript - JavaScript调用/执行后是否需要删除回调函数?

标签 javascript memory-management callback garbage-collection jsonp

我有一个网络应用程序,它会定期向第 3 方服务(例如 Facebook、Twitter 等)轮询数据。 此轮询/请求是通过 JSONP 进行的(以避免跨域问题)。

例如,一个简单的请求是这样的:

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 会膨胀,因为旧回调或已执行回调。 Mu 的问题是,我是否需要创建一种机制来垃圾收集那些已被执行但不再需要的人?

最佳答案

您不一定需要删除旧的回调,如果您每个页面只调用几次,但如果您的页面是一个长时间运行的页面并且重复调用它可能是一个很好的选择删除它们的想法。

“机制”可以简单到

delete self.fn[id];

调用函数后。

关于javascript - JavaScript调用/执行后是否需要删除回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102569/

相关文章:

c++ - 用任务管理器杀死时如何防止内存泄漏

algorithm - 合并排序 : Are the additional array copies necessary?

c - 堆栈分配的内存与动态分配的内存

php - 如何将数组传递给 Drupal 菜单回调

javascript - 在 JetStrap(在线 Twitter Bootstrap 编辑器)中引用 JQuery

JavaScript 变量 "out of focus"?

javascript - 从 dispatch 返回 promise

javascript - 使用 JavaScript 从每个元素中删除隐藏类

android - fragment 回调到另一个带有 fragment 的 Activity ,导致 fragment View 中出现空指针

javascript - 回调 - 第二次回调后出现错误