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); }
返回一个新的匿名函数,使用的变量就是自己独享的。