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 />"); }