我想知道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元素上的自定义属性可能会搞乱垃圾回收?
答案 0 :(得分:0)
假设没有其他对此元素的引用,它是否会正常收集垃圾?
是
有没有什么方法可以让DOM元素上的自定义属性搞乱垃圾收集?
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