当我使用.bind(...)绑定事件时,如果我离开页面/刷新页面,我是否需要解绑它们(.unbind())以避免内存泄漏,或者jQuery会自动移除它们?
关于闭包,我读到如果使用不当,它们可能导致内存泄漏。如果我做如下操作:
function doStuff( objects ){ //objects是一个包含DOM对象数组的jQuery对象 var textColor = "red"; objects.each(function(){ $(this).css("color", textColor ); }); }
doStuff( $( "*" ) );
我知道上面的代码很愚蠢(有更好/更简单的方法),但我想知道它是否会导致.each出现循环引用/闭包问题,并且是否会导致内存泄漏。如果它确实会导致内存泄漏,我该如何重写它(通常使用类似的方法)以避免内存泄漏?
谢谢您的帮助。
编辑:我有另一个与第2个问题类似的情况(我想这就是第3个问题了)。
If have something like this:
function doStuff( objects ){ //iframe objects var textColor = "red";
function innerFunction() { $(this).contents().find('a').css("color", textColor ); } objects.each(function(){ //I can tell if all 3 are running then we //have 3 of the same events on each object, //this is just so see which method works/preferred //Case 1 $(this).load(innerFunction); //Case 2 $(this).load(function(){ $(this).contents().find('a').css("color", textColor ); }); //Case 3 $(this).load(function(){ innerFunction(); }); });
}
doStuff( $( "iframe" ) );
谢谢!
var test = $('#id').click(function(){$(this).hide();});
- Mike Gleason jr Couturiervar test = {}; test.node = $('#id'); test.node.bind('click',function(){})); test.node.remove();
你可以循环执行100次左右,观察内存使用量增加。 - jordancpaulvar test
语句。如果你调用test.remove(),它可能会泄漏。我说可能是因为我从未能够解决与jQuery团队的问题,即为什么会发生这种情况。尝试在IE中使用我链接的jsFiddle查看我在说什么。我的示例中闭包更微妙 - 匿名函数创建了一个环绕test的闭包,它引用了节点。 - jordancpaul