在ajax请求后释放内存

时间:2011-05-11 09:08:03

标签: jquery

在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;
                });
    };
}

2 个答案:

答案 0 :(得分:4)

没有。 delete不释放内存,它会从对象中删除属性。如果你在var上调用它(就像你做的那样),它就没有效果了。

JavaScript是一种垃圾收集语言。当没有任何对该对象的引用时,对象消耗的内存将自动回收。循环引用会自动处理(即使A引用BB引用A,也不提供 else 引用{{1} }}或A,它们都可以被回收)。

遇到问题的地方是在某些浏览器上使用非JavaScript对象的循环引用(我在看你,微软)。如果你有一个引用一个对象(比如一个函数)的DOM元素,并且该对象也引用了DOM元素,那么在IE上,即使没有其他任何引用这些对象,它们也永远不会被回收。但是你的例子似乎不是这样。

(关于上面B的声明:如果您从对象中删除的属性引用了其他任何引用的对象,则删除该属性会使该对象可用于回收。但这是一个副作用,同样,delete只涉及属性,而不是变量。)

答案 1 :(得分:3)

JavaScript运行自己的垃圾收集器。这意味着你不需要(也不能)对它做任何事情。

This answer加深了你的好奇心。