Javascript:document.createElement('')&delete DOMElement

Gar*_*een 49 html javascript createelement

如果在函数中创建元素,如:

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
}
Run Code Online (Sandbox Code Playgroud)

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

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
   delete createdElement;
}
Run Code Online (Sandbox Code Playgroud)

我只是好奇 :)

Ant*_*nes 38

它会因浏览器而异,但javascript delete关键字与DOM的createElement方法无关.没有必要使用delete.

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

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

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

  • @Cresent:在形成闭包之前,必须将对函数的引用放在当前正在执行的上下文之外的某个位置.但是,该函数甚至不必引用包含元素的变量来存在循环引用,事实上变量和函数都存在于同一个执行上下文中就足以做到这一点. (3认同)

Chr*_*oph 11

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

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