我已经阅读了很多关于如何在各种版本的IE中创建内存泄漏的内容.
一些很棒的信息可以在这里找到:
http://msdn.microsoft.com/en-us/library/bb250448%28VS.85%29.aspx
http://laurens.vd.oever.nl/weblog/items2005/closures/
使用JQuery的闭包是一种非常常见的做法.关于IE和内存泄漏,我找不到任何与JQuery的事件模型(大量使用关闭)有关的文章.上面发布的第二篇文章是一种在使用闭包时避免内存泄漏的策略.
JQuery是否已经实施了类似于文章中概述的策略,以帮助清理使用闭包时潜在的泄漏?或者是我必须注意和代码的东西?
例如,
在IE6 / 7中创建内存泄漏:
- function foo(value) {
- var bar = document.getElementById("selector");
- bar.attachEvent("onclick",// closure
- function() {
- alert(value); // reference to 'value' from outer function scope
- }
- );
- }
以上示例的以下JQuery版本是否会导致IE6 / 7中的内存泄漏?
- function foo(value) {
- $('#selector').click(
- // closure
- function() {
- alert(value); // reference to 'value' from outer function scope
- }
- );
- }
最佳答案
来自jQuery 1.3源码:
remove: function( selector ) {
if ( !selector || jQuery.filter( selector,[ this ] ).length ) {
// Prevent memory leaks
jQuery( "*",this ).add([this]).each(function(){
jQuery.event.remove(this);
jQuery.removeData(this);
});
if (this.parentNode)
this.parentNode.removeChild( this );
}
},