【发布时间】:2011-03-11 02:30:45
【问题描述】:
我已经使用 jQuery 两个多月了,并阅读了几天关于 Javascript 内存泄漏的信息。 我有两个关于内存泄漏和 jQuery 的问题:
当我绑定(使用 .bind(...))时,如果我离开页面/刷新以避免内存泄漏,是否必须解除绑定(.unbind()),还是 jQuery 会为我删除它们?
-
关于闭包,我读到如果使用不当,它们会导致内存泄漏。如果我这样做:
function doStuff( objects ){ //objects 是一个 jQuery 对象,它包含一个 DOM 对象数组 var textColor = "红色"; 对象.每个(函数(){ $(this).css("color", textColor); }); }
doStuff($("*"));
我知道上面的代码很愚蠢(更好/更简单的方法)但我想知道这是否会导致 .each 的循环引用/关闭问题以及是否会导致内存泄漏。如果确实导致内存泄漏,我将如何重写它(通常是类似的方法)以避免内存泄漏?
提前致谢。
编辑:我有另一个类似于问题 2 的案例(我猜这会成为第 3 部分)。
-
如果有这样的事情:
function doStuff( objects ){ //iframe 对象 var textColor = "红色";
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"));
上面有 3 种情况,我想知道哪种方法(或所有方法)会产生内存泄漏。另外我想知道哪种方法是首选方法(通常我使用案例 2)或更好的做法(或者如果这些方法不好,那会更好吗?)。
再次感谢!
【问题讨论】:
标签: javascript memory-leaks closures jquery