【发布时间】:2012-10-01 18:40:41
【问题描述】:
我有一个 JavaScript 闭包,我会在我的 Web 应用程序的整个生命周期中不断重新创建它(单个完整的 ajax 页面)。
我想知道它是否会造成内存泄漏。
这是一个例子JSFIDDLE
有问题的代码:
function CreateLinks() {
var ul = $("<ul></ul>").appendTo('div#links');
for (var i in myLinks) {
var li = $('<li>' + myLinks[i].name + '</li>').appendTo(ul);
//closure starts here
(function (value) {
li.click(function (e) {
$('div#info').append('<label>' + value + '</label><br />');
RecreateLinks();
});
})(myLinks[i].value);
}
}
【问题讨论】:
-
在那里关闭有什么意义?为什么不说
var value = myLinks[i].value;直接运行代码呢? -
@Jacob:哦,我明白了。你的意思是
myLinks[i].value,对。 -
以上代码没有内存泄露。但是解决问题的方法太复杂了
-
闭包有一个目的,测试并将this jsfiddle与我的问题中的那个进行比较......这个只为所有链接输出“tres”。
-
你不能把电话放在
setInterval(method, 10);中,然后观察你的操作系统统计数据,看看你的浏览器应用程序的内存是否增加了?我知道除了闭包还有更多的事情发生,但是 jQuery 的内存效率很高