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/

10-13 00:34