Javascript 何时对本地未连接的DOM元素进行垃圾收集?

Javascript 何时对本地未连接的DOM元素进行垃圾收集?,javascript,dom,garbage-collection,Javascript,Dom,Garbage Collection,Javascript中的对象在失去作用域且不再被引用时会被垃圾回收。但是,何时不再引用元素?采取以下措施: var el=(函数(){ //生成DOM元素,但不要将其附加到DOM var div=document.createElement('div'); //提供内部内容 div.innerHTML='AB'; //获取对div中第一个子元素的引用 var结果=div.firstChild; //吹走所有div内容 div.innerHTML=''; //返回原始的第一个子元素 返回结果; }

Javascript中的对象在失去作用域且不再被引用时会被垃圾回收。但是,何时不再引用元素?采取以下措施:

var el=(函数(){
//生成DOM元素,但不要将其附加到DOM
var div=document.createElement('div');
//提供内部内容
div.innerHTML='AB';
//获取对div中第一个子元素的引用
var结果=div.firstChild;
//吹走所有div内容
div.innerHTML='';
//返回原始的第一个子元素
返回结果;
})();
我的问题有两个:

  • 删除
    div.innerHTML=''中的内容分配还会删除对其中任何子节点的引用,还是在垃圾收集过程的内存前检索过程中删除
  • 如果
    div
    已附加到DOM,而不是函数退出时超出范围的局部变量,这会有什么区别吗
  • 是否删除div.innerHTML=''中的内容;赋值还将删除对其中任何子节点的引用

    它会删除
    div
    对它们的引用,是的。当然,如果其他东西(如
    结果
    变量)对它们有引用,则该引用将保留。这发生在作业完成时,而不是以后

    通过查看您在
    result
    中获得的
    span
    上的
    parentNode
    ,可以判断何时清除
    div
    及其子级(双向)之间的引用。在
    div.innerHTML=''之前行,它将是对
    div
    的引用;之后,它将是
    null

    var el=(函数(){
    //生成DOM元素,但不要将其附加到DOM
    var div=document.createElement('div');
    //提供内部内容
    div.innerHTML='AB';
    //获取对div中第一个子元素的引用
    var结果=div.firstChild;
    log(“清除div之前的result.parentNode:+result.parentNode”);
    //吹走所有div内容
    div.innerHTML='';
    log(“清除div后的result.parentNode:+result.parentNode”);
    //返回原始的第一个子元素
    返回结果;
    })();
    是否删除div.innerHTML=''中的内容;赋值还将删除对其中任何子节点的引用

    它会删除
    div
    对它们的引用,是的。当然,如果其他东西(如
    结果
    变量)对它们有引用,则该引用将保留。这发生在作业完成时,而不是以后

    通过查看您在
    result
    中获得的
    span
    上的
    parentNode
    ,可以判断何时清除
    div
    及其子级(双向)之间的引用。在
    div.innerHTML=''之前行,它将是对
    div
    的引用;之后,它将是
    null

    var el=(函数(){
    //生成DOM元素,但不要将其附加到DOM
    var div=document.createElement('div');
    //提供内部内容
    div.innerHTML='AB';
    //获取对div中第一个子元素的引用
    var结果=div.firstChild;
    log(“清除div之前的result.parentNode:+result.parentNode”);
    //吹走所有div内容
    div.innerHTML='';
    log(“清除div后的result.parentNode:+result.parentNode”);
    //返回原始的第一个子元素
    返回结果;
    
    })();非常彻底的回答@T.J.Crowder。谢谢非常彻底的回答@T.J.Crowder。谢谢
    var el = (function() {
      // Generate DOM element, but don't attach it to DOM
      var div = document.createElement('div');
      // Provide interior content
      div.innerHTML = '<span>A</span><span>B</span>';
      // Get reference to first child element in div
      var result = div.firstChild;
      // Blow away all div content
      div.innerHTML = '';
      // Return original first child element
      return result;
    })();