setTimeout循环传参数几种方式

本文探讨了JavaScript中使用setTimeout与setInterval时,如何正确处理变量i的值,避免常见错误。通过闭包、let声明及bind方法等技巧,确保每次回调函数都能获取正确的迭代值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for(var i=0;i<5;i++){
        setTimeout(function(){
            console.log(`错误 ${i}`);
        },0)
    }
这种错误的,参数不会变!
以下几种方式正确。
 for(var i=0;i<5;i++){
        (function(i){
            setTimeout(function(){
                console.log(`闭包 ${i}`);
            },0)
        })(i);
    }

    
     
    for(let i=0;i<5;i++){
        setTimeout(function(){
            console.log(`let ${i}`);
        },0)
    }

     
    for(var i=0;i<5;i++){
        setTimeout(function(i){
            console.log(`bind ${i}`);
        }.bind(null,i),0)
    }

    
     
    for(var i=0;i<5;i++){
    
        setTimeout(function(i){
            console.log(`参数 ${i}`);
        },0,i)
    }

间隔3秒执行,注意i*3000:

 for(var i=0;i<5;i++){
        (function(i){
            setTimeout(function(){
                console.log(`闭包 ${i}`);
                //alert("闭包"+ i);
            },i*3000)
        })(i);
    }

setInterval是一直循环的 到4重新执行:

var i = 0;
setInterval(function(){
    if( i > 4 ){
        i = 0;
    }
    List(i);
    i++;
},5000);
function List(i){
  document.write(i+"<br />");
}

 

转载于:https://www.cnblogs.com/feng18/p/9485249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值