我理解JavaScript中循环引用的概念以及避免它们以防止内存泄漏的重要性,但我没有找到有关将闭包或原型的成员函数分配给事件处理程序如何影响垃圾回收的任何信息。
例如,假设我编写了以下代码之一:
给DOM事件处理程序分配func()函数,是否会防止整个对象被GC回收?
例如,假设我编写了以下代码之一:
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;
给DOM事件处理程序分配func()函数,是否会防止整个对象被GC回收?
func
关闭了o
,因此它确实可以访问它。但有些引擎可能会认为它没有访问o
。 - Felix Kling