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个闭包? 最佳答案
仅创建一个关闭
因为您误解了事件处理程序的概念。
document.getElementById("innbutt").onclick = (function(){
var newvar = "hello";
return function(){
alert(newvar);
}
})();
可以说等同于:
document.getElementById("innbutt").onclick = function() {
alert("hello");
};
因为在第一种情况下,立即执行的函数使用
alert
返回匿名,并且将其分配给onclick
处理程序。每当您单击按钮时,都会执行此特定的匿名函数。错误地认为没有新的onclick
处理程序分配得到处理。关于javascript - 封闭-创建新的封闭时,现有封闭会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5858923/