setTimeout循环传参数几种方式

时间:2023-03-08 19:13:20
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 />");
}