如果您在像这样的函数中创建一个元素:

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

而且您没有将其附加到DOM中的任何位置,即通过.appendChild函数,它是否仍保留在内存中?那你一定要做
function makeDomElement()
{
   var createdElement = document.createElement('textarea');
   delete createdElement;
}

我只是好奇 :)

最佳答案

不同的浏览器会有所不同,但是javascript delete关键字与DOM的createElement方法无关。无需使用delete

将会发生的是,对当前保存在createdElement中的元素的引用将被垃圾回收。现在,对于IE而言,这意味着该元素的引用计数将降至0,因此它将破坏自身并释放其内存。其他浏览器的处理方式有所不同,通常DOM中的元素本身就是垃圾收集对象,并且将在同一(或特定于DOM的)GC周期中被删除。

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

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

07-24 09:20