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,整个内存管理的事情仍然让我感到困惑......
xhr 对象的responseXML 属性是对实际数据对象的引用(正如您在第二段代码中隐式假设的那样:您不是在复制数据,而是在复制引用)。
所以该xhr对象最终会被垃圾回收。对它只有一个引用:就在创建它的函数中。