我正在研究一些常见的Javascript程序。下面的代码会向DOM添加4个按钮,并为每个按钮添加一个事件监听器:
for(var i =0;i<5;i++){
var btn = document.createElement('button');
btn.appendChild(document.createTextNode('Button' + i));
//function 1
(function(i){
btn.addEventListener('click', function(){console.log(i)});
})(i);
//function 2 commented
/*btn.addEventListener('click', (function(i){
return function(){
console.log(i);
}
})(i));*/
document.body.appendChild(btn);
}
函数1和函数2都向按钮添加了事件监听器,并且工作得非常完美。我想知道,为什么下面的代码不起作用:
for(var i =0;i<5;i++){
var btn = document.createElement('button');
btn.appendChild(document.createTextNode('Button' + i));
btn.addEventListener('click', function(){
console.log('Clicked' + i);
});
document.body.appendChild(btn);
}
这段代码在每次按钮点击时仅记录数字 5。为什么会这样呢?我不明白为什么它不能为每个循环保留变量 i 的值。