重复的.ajax调用导致jQuery内存泄漏

Bob*_*ack 7 firefox jquery memory-leaks

我正在使用以下模式,它在Firefox中泄漏内存:

$(function() {

    (function() {

        var callee = arguments.callee;

        $.ajax({
            url: '...',
            success: function() { ... setTimeout(callee, 1000); },
            error: function() { ... setTimeout(callee, 1000); }
        });

    })();

});
Run Code Online (Sandbox Code Playgroud)

即使成功/错误除了再次调用setTimeout之外什么都不做,内存泄漏仍然存在.我通过Windows任务管理器观察泄漏; 如果页面保持打开状态,firefox.exe的内存使用量会逐渐增加.对于此代码的最终版本,我只需要每分钟更新一次,但每隔一秒就会更快地显示内存泄漏!

(注意:对于这个问题,这看起来像一个非常类似的问题,但那里的选择答案似乎不适合Firefox)

Ale*_*rar 0

也许值得尝试这样的事情?

$(function() 
{
    (function() 
    {
        var callee = arguments.callee;
        $.ajax(
        {
            url: '...',
            success: function() 
            {
                ... 
                setTimeout(function()
                {
                    callee();
                }, 1000);
             },
             error: function() 
             {
                ... 
                setTimeout(function()
                {
                    callee();
                }, 1000);
              }
        });   
    })();
});
Run Code Online (Sandbox Code Playgroud)

因此,不要将 calle 传递给 setTimeout 回调,而是传递一个调用 calle 的匿名函数。