gpt4 book ai didi

javascript - 带有嵌套函数的 JS 垃圾收集

转载 作者:行者123 更新时间:2023-12-04 08:17:28 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How JavaScript closures are garbage collected

(6 个回答)


8 个月前关闭。




我想知道垃圾收集如何与函数一起工作。对于对象,引用非常简单并且很容易形成一棵树。这对于函数来说是一样的吗?例如:

(function() {
let b = 2;
let c = 3;
window.a = function() {
console.log(b + c);
}
})();

a(); //prints 5
在这种情况下,b 和 c 没有被垃圾收集,因为 a 有对它们的引用?这是真的?

最佳答案

根据规范,函数对象持有指向周围环境记录的内部属性,这是存储变量值的地方。引擎在内存中如何表示取决于引擎,但只要可以访问函数对象,环境记录就必须知道,因此它不能用于垃圾收集。

In this case, b and c are not garbage collected because a has references to them? Is this true?


假设引擎实际上表示堆上的环境记录并进行垃圾收集(这两者都是非常合理的假设)是的。
在某些条件下,例如如果一个变量没有被访问或者是一个常量,那么引擎根本不存储变量的值可能是一种优化:
 function unoptimized() {
const unchanged = 1;
let unused = 0;
return () => unchanged;
}

/* could be optimized to (very simplified) */
const _inner = () => 1;
function optimized() { return _inner; }

关于javascript - 带有嵌套函数的 JS 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65648581/

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