function fetchXmlDoc(uri) {
var xhr = new XMLHttpRequest();
var async = false;
xhr.open("GET", uri, async);
xhr.send();
return xhr.responseXML;
}
基本上,当我调用此函数时,xhr
对象是否会被垃圾收集,还是会永远存在,因为调用者持有xhr.responseXML
?如果是后者,这会解决吗?
function fetchXmlDoc2(uri) {
var xhr = new XMLHttpRequest();
var async = false;
xhr.open("GET", uri, async);
xhr.send();
var xml = xhr.responseXML;
return xml;
}
尽管我使用了多年的JS,整个内存管理仍然让我感到困惑......
答案 0 :(得分:2)
xhr对象的responseXML属性是对实际数据对象的引用(正如您在第二段代码中隐式假设的那样:您没有复制数据,而是复制引用)。 / p>
因此xhr
对象最终会被垃圾收集。只有一个引用:就在这个函数的创建位置。