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

时间:2011-04-01 20:16:41

标签: javascript memory-leaks garbage-collection xmlhttprequest

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,整个内存管理仍然让我感到困惑......

1 个答案:

答案 0 :(得分:2)

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

因此xhr对象最终会被垃圾收集。只有一个引用:就在这个函数的创建位置。