Javascript: document.createElement (”) & delete DOMElement

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

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

并且您不需要在 DOM 中的任何地方追加它,例如通过。函数,它是否仍然保留在内存中?所以你必须

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

我只是好奇

48260 次浏览

不同的浏览器会有所不同,但是 javascript delete关键字与 DOM 的 createElement方法没有任何关系。没有必要使用 delete

将会发生的情况是,对当前保存在 createdElement中的元素的引用将被垃圾收集。现在在 IE 的情况下,这意味着元素的引用计数将被删除到0,因此它将自毁并释放它的内存。其他浏览器的处理方式不同,通常 DOM 中的元素本身就是垃圾收集对象,在相同的(或者特定于 DOM 的) GC 周期中将被删除。

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

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

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

另外,由于无法删除本地变量,您的代码被破坏: 尝试这样做甚至会在严格的 ES5模式下抛出语法错误。