我必须这个文件 https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Memory_leaks这表明这里发生了关闭:
function addHandler(){
document.getElementById('el').onclick = function(){
this.style.backgroundColor = 'red';
};
}
虽然此代码删除了闭包:
function addHandler() {
var clickHandler = function() {
this.style.backgroundColor = 'red';
};
(function() {
var el = document.getElementById('el');
el.onclick = clickHandler;
})();
}
我看不出第二个如何解决关闭问题。为什么代码不位于el.onclick = clickHandler
创建一个闭包?clickHandler
's this
必须满足el
.
你的例子不正确。您链接到的文档指出,此代码块创建了一个可能泄漏内存的闭包(请注意外部函数中的变量):
function addHandler() {
var el = document.getElementById('el');
el.onclick = function() {
this.style.backgroundColor = 'red';
};
}
您发布的两个示例都不会创建闭包(或仅创建一个空闭包),但它们使用不同的方法来避免它。
另请注意,此问题似乎仅影响 IE 的 JS 引擎。其他引擎,例如 V8 / Chrome,似乎只捕获闭包中内部函数中使用的变量,因此我希望在此代码示例中不会创建循环引用,即使会创建循环引用,它们也应该能够使用循环引用处理垃圾收集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)