gpt4 book ai didi

javascript - 泄漏的原因是什么?

转载 作者:行者123 更新时间:2023-12-03 00:39:52 25 4
gpt4 key购买 nike

如何修复这段代码中的内存泄漏?泄漏的原因是什么?

var theItem = null;
var replaceItem = function() {
var priorItem = theItem;
var writeToLog = function() {
if (priorItem) {
console.log("hi");
}
};
theItem = {
longStr: new Array(1000000).join('*'),
someMethod: function() {
console.log(someMessage);
}
};
};
setInterval(replaceItem, 1000);

最佳答案

问题是,每次调用 replaceItem 时,都会增加对象链,因为内部函数具有指向 priorItem 的指针,该指针指向先前函数调用的结果,该结果是“已保存”在 theItem 全局变量(外部函数)中。因此,第 n 个函数调用的指针指向第 (n-1) 个函数调用的结果 - 并且您以这种方式创建指针链 - JS 垃圾收集器不会清理该链(除非您将 null 设置为它的开头 -全局 theItem,并停止调用函数)。

theItem 对象包含 someMethod,它在范围内包含 theItem 的先前值(其中包含进一步的先前值...等等。 ..)。

这在 this modified code 中更加明显- 当我们在 chrome 中调试它时:

enter image description here

我不知道你的目的是什么,但只是打破这个链条,例如删除 replaceItem 函数体内的行 varpriorItem = theItem; (并且还可以保存功能将 if (priorItem) { 更改为 if (theItem) {)。

关于javascript - 泄漏的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507746/

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