Ajax(XMLHttpRequest)对象在使用后进行清理
Does Ajax (XMLHttpRequest) objects cleanup after use?
如果您定义了一个函数,如:
function fetchData(callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readystate === 4 && xhr.status === 200) {
callback(xhr.responseText);
}
};
xhr.open('GET', 'http://example.com/', true);
xhr.send();
}
现在想象一下我经常运行fetchData
函数。
所以问题是,在回调执行后,我是否需要/应该运行xhr = null;
?
我知道JavaScript有一个垃圾收集器,但不将xhr
设置为null
会有伤害吗?
这个问题类似于XMLHttpRequest-使用后释放?但我觉得它没有得到一个答案来解释对象实际上处于这样一种状态,即垃圾回收将删除它。
我强烈建议您阅读全部您链接的mozilla文档:
分配您需要的内存,使用分配的内存(读、写)不再需要时释放分配的内存。第一部分和第二部分在所有语言中都是明确的。最后一部分在低级语言中是显式的,但在JavaScript等高级语言中大多是隐式的。
引用垃圾收集:
这是最幼稚的垃圾收集算法。该算法将"不再需要对象"的定义简化为"对象没有其他对象引用"。如果一个对象没有指向该对象的引用,则该对象被认为是可垃圾收集的。周期是有限制的。
标记和扫描算法:
该算法将"不再需要对象"的定义简化为"无法访问对象"。该算法假定一组称为根的对象的知识(在JavaScript中,根是全局对象)。垃圾收集器将定期从这些根开始,查找从这些根引用的所有对象,然后查找从这些引用的所有物体,等等。因此,从根开始,垃圾收集器将查找所有可到达的物体并收集所有不可到达的物质。
结论:如果您的对象在任何地方都无法访问(在您退出函数的情况下),那么它将被垃圾收集。这在更高级别的语言中是不必担心的。
编辑:感谢Roland Starke指出,您可以在这里阅读垃圾收集器如何处理XMLHttpRequest的规范。
不,您不应该将xhr设置为null。
在JavaScript中,一旦删除了对对象的所有引用,就会发生GC。所以,只要你不做一些疯狂的事情,比如:
fetchData.cache = xhr;
随后在代码参考中,该值为:
var data = fetchData.cache;
那你就不用担心做任何事情了。GC会在它的时间到达。
- XMLHttpRequest未返回值-状态202
- XMLHttpRequest在移动设备上的chrome上不起作用
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 检查xmlhttprequest问题的消息
- 主线程上的同步XMLHttpRequest已弃用
- 如何定期发出xmlhttprequest
- javascript第三个XMLHttpRequest被拒绝.但前两个是允许的
- 上传带有XMLHttprequest的文件-多部分/表单数据中缺少边界
- 对象#<XMLHttpRequest>没有方法'完成'
- 在XMLHttpRequest之后重新初始化jQuery
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- Javascript XMLHttpRequest——只有第一个POST请求有效
- XMLHttpRequest - difference between Chrome & Firefox
- IE上的新XMLHttpRequest()出现JS Ajax未指定错误
- 非常简单的XMLHttpRequest不起作用
- 如何使用XMLHttpRequest下载文件
- XMLHttpRequest在$.ajax工作的地方给出了CORS错误
- XMLHttpRequest.open()AJAX中的参数url
- XMLHTTPRequest脚本中没有internet连接和超时
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作