Javascript:document.createElement('')&删除DOMElement

时间:2009-12-04 14:18:22

标签: javascript html createelement

如果您在以下函数中创建元素:

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
}

并且你不会在DOM的任何地方附加它,即通过.appendChild函数,它是否仍然保留在内存中?所以你需要做什么

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
   delete createdElement;
}

我只是好奇:)

2 个答案:

答案 0 :(得分:32)

它会因浏览器而异,但javascript delete关键字与DOM的createElement方法无关。无需使用delete

将会发生对createdElement中当前持有的元素的引用将被垃圾收集。现在在IE的情况下,这将意味着该元素将其引用计数降为0,因此它将自行销毁并释放其内存。其他浏览器做的事情不同,通常DOM中的元素本身就是垃圾收集对象,并且会在相同(或者可能是特定于DOM)的GC循环期间被删除。

如果元素已添加到文档中,那么在IE的情况下会有另一个引用添加到元素中,因此当删除createdElement中的引用时,元素对象仍将具有非零引用计数并继续存在。

对于其他浏览器,其中元素本身是垃圾收集的,因为收集器会在连接到文档的对象的图形中看到它,所以不会收集该元素。

答案 1 :(得分:11)

在函数终止之后,不再有对该对象的引用,即如果垃圾收集器正常工作,则应该收集它(如果涉及DOM节点,则存在IE错误,该错误会阻止具有循环引用的对象)。

此外,您的代码被破坏,因为无法删除局部变量:尝试这样做甚至会在严格模式ES5中抛出语法错误。