如果事件侦听器附加到表的特定列中的每个单元格,然后从表中删除每一行,为了避免内存泄漏,开发人员必须在行之前删除事件侦听器删除,或浏览器清理?
编辑:Michael建议说event delegation
的文章比将监听器直接绑定到表中的每个单元格要好得多,但我不确定从垃圾收集的角度看它是否更好,或者只是表现更好。请评论。来自文章:
$('table').on('click', 'td', function () {
$(this).toggleClass('active');
});
据说优于:
$('table td').on('click', function () {
$(this).toggleClass('active');
});
Edit2:jQuery documentation of .on() and event delegation也关注性能,但是当从大型表中反复删除行 en masse 时,从垃圾收集角度看会发生什么的问题,以及正在由委派机制监听单元格单击,仍为。
答案 0 :(得分:2)
我不确定,但我想这篇精彩的文章会清理一下(搜索“垃圾收集”):http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory-efficient-javascript/
答案 1 :(得分:0)
我不确切知道,但我认为浏览器(JavaScript引擎)负责垃圾收集。
我知道这种机制在新一代浏览器中是自动的
所以,流程将是这样的,
1. you create cells
2. you attach listeners
3. memory allocated
4. you remove cells
5. listeners becomes dangling
6. Garbage collector clears it
7. you are happy
还有一些机制可以明确地清除它,为此搜索SO并且会有很多与此相关的问题
但我不确定!所以等待专家拿出坚实的答案