在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;
});
};
}
答案 0 :(得分:4)
没有。 delete
不释放内存,它会从对象中删除属性。如果你在var
上调用它(就像你做的那样),它就没有效果了。
JavaScript是一种垃圾收集语言。当没有任何对该对象的引用时,对象消耗的内存将自动回收。循环引用会自动处理(即使A
引用B
而B
引用A
,也不提供 else 引用{{1} }}或A
,它们都可以被回收)。
遇到问题的地方是在某些浏览器上使用非JavaScript对象的循环引用(我在看你,微软)。如果你有一个引用一个对象(比如一个函数)的DOM元素,并且该对象也引用了DOM元素,那么在IE上,即使没有其他任何引用这些对象,它们也永远不会被回收。但是你的例子似乎不是这样。
(关于上面B
的声明:如果您从对象中删除的属性引用了其他任何引用的对象,则删除该属性会使该对象可用于回收。但这是一个副作用,同样,delete
只涉及属性,而不是变量。)
答案 1 :(得分:3)
JavaScript运行自己的垃圾收集器。这意味着你不需要(也不能)对它做任何事情。
This answer加深了你的好奇心。