Javascript 较新版本的Internet Explorer是否修复了循环引用内存泄漏?
我目前在一个使用长寿命页面(LLP)的项目中工作,这让我担心性能和内存泄漏 回顾一些,我发现这可能会导致内存泄漏:Javascript 较新版本的Internet Explorer是否修复了循环引用内存泄漏?,javascript,performance,Javascript,Performance,我目前在一个使用长寿命页面(LLP)的项目中工作,这让我担心性能和内存泄漏 回顾一些,我发现这可能会导致内存泄漏: function addHandler() { var el = document.getElementById('el'); el.onclick = function() { this.style.backgroundColor = 'red'; }; } 起初我不明白为什么,但很容易找到很多解释。我发现了一个at代码项目,在道格拉斯·
function addHandler() {
var el = document.getElementById('el');
el.onclick = function() {
this.style.backgroundColor = 'red';
};
}
起初我不明白为什么,但很容易找到很多解释。我发现了一个at代码项目,在道格拉斯·克罗克福德的这篇文章和这篇文章中有更详细的解释
现在我的问题是:
据我所知,这个特定的漏洞是一个IE特有的bug,对吗?而且,更重要的是:在比尔叔叔的公司推出我们深爱的蓝色浏览器之前,我应该担心这个漏洞的哪个版本
编辑:
关于最后一个问题的可靠参考资料是可取的
编辑#2:
也许我错了,但我认为使用“新”标准化的活动界面,我们不会遇到同样的问题:
function addHandler() {
var el = document.getElementById('el');
el.addEventListener('click', function() {
this.style.backgroundColor = 'red';
});
}
由于没有直接分配,我认为这就解决了问题。然而,这个API仅仅是IE9+,这让我想知道我们是否会在库的回退中遇到同样的问题,例如jQuery:
var $el = $('.some-el');
$el.on('click', function(){
// ...
});
我对jQuery内部的了解还不足以说明这段代码在IE8上的作用。声称IE8“缓解”了这个问题。不管是不是这样。。。这里有一个(不是答案)有一个公平的解释,也就是说IE8只有一个小的问题变体。我还认为jQuery会使用本机
elem.attachEvent()
变体,直到最近添加了elem.addEventListener()
支持时,它才存在于IE中。我不完全确定这里的MDN是否正确;处理程序使用this
而不是el
@PaulS.,是的,但是outter作用域会自动“添加”到闭包作用域,创建对el
的引用。@HenriqueBarcelos在JavaScript中是一种完全不同的机制,在调用时通过调用它的方式进行计算,而不是如何或在何处定义函数。i、 e.whilefoo.bar=function(){returnthis;}
作为foo.bar()调用
是foo
,您还有fizz.buzz=foo.bar;fizz.buzz();//fizz和foo.bar.call(fizz);//嘶嘶作响