It is known that circular references to DOM objects in closures will cause memory leaks in lower versions of IE.
So jq objects will circular references cause memory leaks?
For example: Will the following functions cause memory leaks?
function text() {
var $butt = $('#butt');
$butt.click(function() {
alert($butt.attr('id'));
});
}
某草草2017-05-19 10:49:28
Yes, if you have this element#butt
在你执行这个函数后从Document中移除,那么它不会被gc回收,因为还存在一个强引用$butt
。
使用这种方式引用对象可以减少动态构建jq对象的开销,但是需要在这个dom被销毁的时候手动off掉所有引用,比如你这个$butt
销毁后应该销毁你的事件引用。$butt.off()
。
另一种方式是在你的事件函数中不要使用闭包,而是使用动态构建的方式。比如$(this).html('hahah')