<body>
<button>1</button>
<button>2</button>
<button>3</button>
</body>
<script>
var btns = document.getElementsByTagName('button');
for(var i =0 ;i<3 ;i++){
btns[i].onclick=function(){
console.log(i);
}
}
</script>
运行结果都是3
在这里的语句中,页面加载完成以后for循环就执行完成了(速度极快,甚至比计时器是0的时候都快),当for循环执行完成以后此时i
等于3,这里最重要的原因是for循环里面i
的声明是var声明的变量。每次运行的时候后面的值会覆盖前面的值,最终得到3
解决方法
把for
循环里面的var
声明修改为let
声明就可以比面这种问题。原因是:let
声明的特点:不能声明重复变量(这里就达到了不能覆盖前面的值的效果,而且每次遍历出来的i
都有一个独立的空间,互不干扰)所以let
会避免这种方法。
在这里单独使用计时器,把时间设置成为0是不行的哦