2016-12-10 5 views
2

Javascriptのガベージコレクションの限界と自己参照によってトリップできるかどうかは疑問です。自己参照機能、DOM要素、&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

それは、Internet Explorerの問題でした。私は今それについて心配する価値があるとは思わない。しかし私は間違っている可能性があります。 – Pointy

答えて

0

この要素への他の参照がないと仮定すると、ガベージコレクションは正常に行われますか?

はい。

DOM要素のカスタム属性がガベージコレクションを混乱させる可能性はありますか?

ガベージコレクションの要旨: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; 
    }; 
})(); 

。​​変数は、要素のガベージコレクションを防止しません。それだけcolorsオブジェクトへのポインタを保持しているため

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

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

あっても、この第2の場合には、要素は、ガベージ収集されます。ここでは、ガベージコレクションについて

より:戻る日にhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management