gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:58:05 25 4
gpt4 key购买 nike

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

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

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 收集整个对象?

最佳答案

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

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

关于javascript - 事件处理程序分配和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com