问题:循环点击按钮弹出对应的数字
<body>
<input type="button" value="按钮1"/>
<input type="button" value="按钮2"/>
<input type="button" value="按钮3"/>
<input type="button" value="按钮4"/>
<input type="button" value="按钮5"/>
<input type="button" value="按钮6"/>
<input type="button" value="按钮7"/>
<input type="button" value="按钮8"/>
<input type="button" value="按钮9"/>
<input type="button" value="按钮10"/>
</body>
错误写法:
<script>
var inputLists=document.querySelectorAll("input");
for(var i=0; i<inputLists.length; i++){
inputLists[i].onclick=function () {
alert(i+1);
};
}
</script>
运行结果:点击任何一个按钮,弹出的数字都是11
解决方法:
方法一:闭包,将i作为函数参数值传递给内部函数。
var inputLists=document.querySelectorAll("input");
for(var i=0; i<inputLists.length; i++){
(function(j){
inputLists[j].onclick=function () {
alert(j+1);
};
}(i));
}
方法二:闭包,将i作为函数参数值传递给内部函数。
var inputLists=document.querySelectorAll("input");
for(var i=0; i<inputLists.length; i++){
inputLists[i].onclick=(function (j) {
return function(){
alert(j+1);
};
}(i));
}
方法三:ES6里,用let定义变量,会产生块级作用域。
var inputLists=document.querySelectorAll("input");
for(let i=0; i<inputLists.length; i++){
inputLists[i].onclick=function () {
alert(i+1);
};
}