【发布时间】:2011-08-17 01:35:15
【问题描述】:
document.getElementById("innbutt").onclick = (function(){
var newvar = "hello";
return function(){
alert(newvar);
}
})();
当我们不断点击innbutt 时,新的闭包会不断创建。
那么,旧的会发生什么?
1)它会被删除吗?或
2) 它是否留在内存中?
编辑:
function addLinks () {
for (var i=0, link; i<5; i++) {
link = document.createElement("a");
link.innerHTML = "Link " + i;
link.onclick = function (num) {
return function () {
alert(num);
};
}(i);
document.body.appendChild(link);
}
}
window.onload = addLinks;
来源:javascript scope and closures
在这种情况下,link.onclick 处理程序只创建了 1 个闭包?
【问题讨论】:
-
“当我们不断点击 innbutt 时,新的闭包不断被创建。”不,匿名的自调用函数在分配给
….onclick后立即执行并返回一个新的匿名函数(带有alert),它实际上分配给….onclick。 -
@Marcel:你能看看我现在发布的代码,看看是否只会为事件处理程序创建 1 个闭包吗?
-
你应该在一个新问题中提出这个问题,这样这里的每个人都会被注意到并可以回答。例如,如果我刚刚去度假并且两周没有看 SO,你会怎么做? ;-) 无论如何,现在您正在创建五个闭包,每个事件处理程序一个。
标签: javascript memory closures