for 循环中实现多个点击事件

<script type="text/javascript">  
function buttonInit(){  
    for(var i=1;i<4;i++){  
        var b=document.getElementById("button"+i);  
        b.addEventListener("click",function(){ alert("Button"+i);},false);  
    }  
}  
window.οnlοad=buttonInit;  
</script>  
</head>  
<body>  
<button id="button1">Button1</button>  
<button id="button2">Button2</button>  
<button id="button3">Button3</button>  
</body>  
</html> 全部弹出button4
当注册事件结束后,i的值是4,当点击按钮时,事件函数function(){alert("button"+i)}这个匿名函数中没有i,
所有到buttonInit函数中找,此时的i为4,所有弹出button4  (但是此时确实是点击不同的按钮,只是都显示i=4)修改如下:
<script>
function buttonInit(){  
    for(var i=1;i<4;i++){  
   (function (arg) {
        var b=document.getElementById("button"+i);  
         b.οnclick=function(){alert("Button"+arg);};  
  })(i);
    }  
}  
window.οnlοad=buttonInit; 
</script>  js改成如上可以弹出button1 ,button2 , button3


另一个例子

for(var i=0;i<3;i++){

setTimeOut(function(){

console.log(i)

},500)

};

执行结果:3,3,3

所以上述函数应该写成:

for(var i=0;i<3;i++){

(function(i){

setTimeOut(function(){

console.log(i)

},500);

})(i);

}

另一种修改方法:把var改成let即可

for(let i=0;i<3;i++){

setTimeOut(function(){

console.log(i)

},500)

};

这种情况创建了太多的定时器,如果i值非常大,会非常消耗资源,大大降低执行性能,优化如下,始终只有一个定时器 

  let i = 0;
    let time = setInterval(output, 1000)
    function output() {
        if (i < 10) {
            console.log(i)
            console.log(time)
            i++
        } else {
            clearInterval(time)
        }
    }

如果自定义参数

 let i = 0;
    let time = setInterval(function() {output(8)}, 1000)
    function output(num){
          if (i < num) {
            console.log(i)
           
            i++
        } else {
            clearInterval(time)
        }
    }
    </script>

转载于:https://my.oschina.net/u/2612473/blog/737793

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值