js闭包的一点用处

昨天看知乎,偶尔看到这么一个题目,

// 要求按“Button 1” 显示 “This is button: 1”,以此类推
for (var i = 1; i <= 3; i++) {
    document.getElementById("btn" + i).onclick = function() {
        alert("This is button: " + i);
    };
}

由于onclick事件是异步的,但是i是一个变量,当这段代码执行完之后,i=4,所以每次执行onclick的时候,调用的都是同一个变量i。

我的解决办法如下:

// 要求按“Button 1” 显示 “This is button: 1”,以此类推
for (var i = 1; i <= 3; i++) {
    document.getElementById("btn" + i).onclick = function(i) {
            return function(){ alert("This is button: " + i);}
    }(i);
}

返回一个新的匿名函数,使用的变量就是自己独享的。

原文地址:https://www.cnblogs.com/jiabo/p/5165543.html