这个JavaScript代码会以我期望的方式进行垃圾收集吗?

Dom*_*nic 7 javascript garbage-collection memory-leaks xmlhttprequest

function fetchXmlDoc(uri) {
    var xhr = new XMLHttpRequest();
    var async = false;
    xhr.open("GET", uri, async);
    xhr.send();

    return xhr.responseXML;
}
Run Code Online (Sandbox Code Playgroud)

基本上,当我调用这个函数时,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;
}
Run Code Online (Sandbox Code Playgroud)

尽管我多年的JS,整个内存管理的事情仍然让我感到困惑......

jmb*_*all 2

xhr 对象的responseXML 属性是对实际数据对象的引用(正如您在第二段代码中隐式假设的那样:您不是在复制数据,而是在复制引用)。

所以该xhr对象最终会被垃圾回收。对它只有一个引用:就在创建它的函数中。