如何完全删除临时元素
How to fully remove temporary elements?
我正在一个函数中动态添加一个"div"节点,该节点只是暂时需要的。 我已经使用<父>.removeChild 将其分离,然后将其设置为 null,但我很好奇当函数超出范围时,在函数中创建的未附加节点会发生什么?父>
如果节点保留在内存中但未连接:
- A) 是否甚至需要设置为 null 还是在返回时自动消失?
- 如果是这样,设置为 null 是正确的方法吗?
- B) 需要对其属性执行任何操作吗?(如node.style.position)
- C) 如果它包含其他子节点,是否需要单独处理它们,或者当它们的未附加父节点设置为 null 时它们会消失吗?
- D) 可以使用哪些工具来查看这些类型的未附加资源?
下面是一个用于讨论目的的示例函数:
function dpi(){
var res={},
div=document.createElement("div"),
body=document.getElementsByTagName('body')[0];
div.style.position="absolute";
div.style.width="1in";
div.style.height="1in";
div.style.left="-100%";
div.style.top="-100%";
body.appendChild(div);
res["xdpi"]=div.offsetWidth;
res["ydpi"]=div.offsetHeight;
body.removeChild(div);
div=null;
return res;
}
JavaScript使用
自动内存管理。也就是说,它使用垃圾回收器,其中未引用的任何内容都将自动释放。要回答您的具体问题:
- 不,没有必要将其显式设置为
null
- 当您返回时它会消失。 - 不;这些应该自动处理。
- 不,孩子也应该自动照顾。
- 也许是某种垃圾收集器调试器。
我应该注意,一些较旧的浏览器具有垃圾收集器的引用计数实现,如果您有循环(指向指向该元素的其他内容的元素,这通常发生在事件侦听器中),它们可能不会被收集,您必须显式中断引用,但今天的大多数浏览器都更聪明。
垃圾回收器在运行时会寻找任何未连接到其他内容的内容(粗略地说 - 它有一些特殊的东西来处理未连接到其他事物的循环引用)。基本上,如果没有更多指向该元素的变量,它将在浏览器方便时从内存中删除。现在,这可能是即时的,也可能是浏览器任意决定它使用了太多内存并决定清理一点时。我不相信有任何关于浏览器应该如何垃圾收集的规范。
相关文章:
- 删除对HTML元素的拖动
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 从所有元素中删除HTML5验证
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 从组件状态的数组中删除元素
- angularjs删除动态形式元素中的特殊字符
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 删除不起作用的父元素和所有子元素
- 一些元素没有从数组中删除
- 正在尝试删除子元素的最后一个子元素
- JavaScript-如何按类查找元素并删除此类
- 正则表达式条件来删除元素
- Small Javascript从动态表单中删除多个元素的问题
- javascript:在元素删除后停止setInterval
- JQUERY:动态 AJAX 和 html 元素删除
- AngularJS ngRepeat元素删除
- AngularJS & lt; select>使用ng-model和ng-options在元素删除时被破坏
- jQuery UI datetimepicker绑定到错误的输入后DOM元素删除
- 防止 jQuery 在元素删除时取消绑定事件