我正在动态添加一个' div'一个只需要临时需要的函数内的节点。我已经用过了< parent> .removeChild将其分离,然后将其设置为null,但我很想知道函数超出范围时在函数中创建的未连接节点会发生什么?
如果节点保留在内存中但未附加:
以下是用于讨论目的的示例函数:
function dpi(){
var res={},
div=document.createElement("div"),
body=document.getElementsByTagName('body')[0];
div.style.position="absolute";
div.style.width="1in";
div.style.height="1in";
div.style.left="-100%";
div.style.top="-100%";
body.appendChild(div);
res["xdpi"]=div.offsetWidth;
res["ydpi"]=div.offsetHeight;
body.removeChild(div);
div=null;
return res;
}
答案 0 :(得分:2)
JavaScript使用自动内存管理。也就是说,它使用垃圾收集器,其中任何未引用的内容都将自动释放。回答您的具体问题:
null
- 当你返回时它会消失。我应该注意,一些旧的浏览器具有垃圾收集器的引用计数实现,如果你有循环(一个指向其他指向元素的元素,通常发生在事件监听器中),它们可能不会被收集并且你必须明确地打破引用,但今天的大多数浏览器都更聪明。
答案 1 :(得分:1)
垃圾收集器在运行时会找出任何与其他东西无关的东西(粗略地说 - 它有一些特殊的东西来处理与其他东西无关的循环引用)。基本上,如果没有更多变量指向该元素,它将在浏览器方便时从内存中删除。现在,这可能是即时的,或者可能是浏览器任意决定它使用太多内存并决定清理一下。我不相信有关浏览器应如何进行垃圾收集的规范。