gpt4 book ai didi

javascript - 在函数中引用父作用域,泄漏的可能性?

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

在 setInterval 中引用父变量时,当我引用 self 时,这是否会引发泄漏?

var A = {};

A.act = function(a_var) {
var self = this;

self.a_var = a_var;
setInterval(function() {
console.log(self.a_var);
}, 100)
}

A.act();

最佳答案

嗯,从某种意义上说,存在泄漏,即您启动了一个运行的间隔计时器,如果不离开页面就无法停止它(因为您不保留句柄)。这意味着创建计时器、计时器回调和 A 的调用上下文永远不会被 GC,因为浏览器拥有对回调位于其计时器列表中,并且回调在创建它的调用的上下文中关闭。但我假设这是期望的行为,所以并不是真正的泄漏。

理论上,a_var 参数由闭包引用(间接地,通过引用调用 act 的执行上下文的绑定(bind)对象) code>),因此即使您不使用它(您使用 self.a_var 代替),它也会保留在内存中。

在实践中(也就是说,允许实现优化),它很复杂。现代引擎可以优化变量,以便它们知道闭包无法访问,但令人惊讶的简单事情可能会干扰该过程(至少在 V8 上)。 This other question and answer have more on that.

关于javascript - 在函数中引用父作用域,泄漏的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239935/

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