事件处理程序分配和内存泄漏

时间:2012-05-24 19:03:23

标签: javascript

我理解JavaScript中循环引用的概念以及避免它们防止内存泄漏的重要性,但是我无法找到有关如何将事件处理程序的闭包或原型成员的函数分配给垃圾收集的任何信息

例如,假设我写了以下任一项:

var o = {};
o.var = 10000000;
o.func = function() { /*Do something that does not involve o.var*/ };

function p() { }
p.prototype.var = 100000;
p.prototype.func = function () { /*Do something that does not involve p.var*/ };

...然后继续做其中任何一个:

var div = document.getElementByID('div');
div.onclick = o.func;

var instance_of_p = new p();
var div = document.getElementByID('div');
div.onclick = instance_of_p.func;

将func()赋值给DOM事件处理程序是否会阻止GC收集整个对象?

1 个答案:

答案 0 :(得分:0)

是。阅读this excellent answer,了解gc在JavaScript中的工作原理。在您的情况下,o仍可在全局或闭包范围内使用,因此不会收集它。它仍然可用于该功能,但可能不会使用。

顺便说一句:有no problem with circular references