gpt4 book ai didi

JavaScript内存泄漏解释

转载 作者:行者123 更新时间:2023-11-29 20:11:50 24 4
gpt4 key购买 nike

function addHandler() {  
var el = document.getElementById('el');
el.onclick = function() {
this.style.backgroundColor = 'red';
}
}

上面的代码包含在 Mozilla blog post on JavaScript 中并指出上述代码会导致内存泄漏。

谁能解释得更多:

Because the reference to el is inadvertently caught in the closure created for the anonymous inner function. This creates a circular reference between a JavaScript object (the function) and a native object (el).

谢谢!

最佳答案

根据我的解释,这本身并不是内存泄漏(有时如果没有这样的构造你就无法解决你的问题,但它们要复杂得多),但这并不好,因为你创建了 onclick 函数每次都是新的,它保持到其父级的“链接”(闭包的作用)。这段代码会好得多;

function clickHandler(){
this.style.backgroundColor = 'red';
}
function addHandler() {
var el = document.getElementById('el');
el.onclick = clickHandler
}

这样,不会创建闭包,不会产生未使用的引用,也不会多次生成函数。

关于JavaScript内存泄漏解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9207808/

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