自引用功能,DOM元素和& Javascript垃圾收集

时间:2016-12-10 19:19:47

标签: javascript dom garbage-collection

我想知道Javascript垃圾收集的限制以及它是否可以通过自我引用来绊倒。

想象一下附在文档上的div。现在让我们为它添加一个自定义属性:一个对所述元素进行操作的函数:

(function(){
  var el = document.getElementById('mydiv');
  el.custom_func = function() {
      el.style.color = 'green';
  };
})();

最后,我们稍后从DOM中删除该元素。

var el = document.getElementById('mydiv');
el.parentNode.removeChild(el);
el = null;

假设没有其他对此元素的引用,它是否会正常收集垃圾?

是否有任何方式,DOM元素上的自定义属性可能会搞乱垃圾回收?

1 个答案:

答案 0 :(得分:0)

  

假设没有其他对此元素的引用,它是否会正常收集垃圾?

  

有没有什么方法可以让DOM元素上的自定义属性搞乱垃圾收集?

垃圾收集的要点:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#Limitation_objects_need_to_be_made_explicitly_unreachable

var green = 'green';
(function(){
  var el = document.getElementById('mydiv');
  el.custom_func = function() {
      el.style.color = green;
  };
})();

在这个例子中,DOM元素将被垃圾收集。 green变量不会阻止元素上的垃圾回收。

var colors = {
  green: 'green';
};

(function(){
  var el = document.getElementById('mydiv');
  el.availableColors = myColors;
  el.custom_func = function() {
      el.style.color = el.availableColors.myColors.green;
  };
})();

即使在第二种情况下,该元素也会被垃圾收集,因为它只保存一个指向colors对象的指针。

有关垃圾收集的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management