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從新執行:spa
var i = 0; setInterval(function(){ if( i > 4 ){ i = 0; } List(i); i++; },5000); function List(i){ document.write(i+"<br />"); }