有时候我们需要对一排元素进行逐一选中,比如下面一个例子中,我们想要当点击一排按钮中的某一个时,利用下面的写法,都是只能弹出最后一个元素。
<body>
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<script>
var btns = document.getElementsByTagName('button');
for(var i=0;i<btns.length;i++){
btns[i].οnclick=function(){
alert('点击了第'+ i +'个按钮');
}
}
</script>
</body>
结果,无论我点击哪一个按钮,都是第五个:
以上产生的原因是因为作用域的问题
解决办法1:利用闭包解决
将for循环改成以下方式便可:
for(var i=0;i<btns.length;i++){
(function(i){
btns[i].οnclick=function(){
alert('点击了第'+ i +'个按钮');
}
})(i)
}
解决办法2:利用es6语法解决
将 声明变量的方式从‘var ’
改成 ‘let’
便可。
如 var btns =》 let btns; var i =》 let i