第一种 闭包
for(var i=;i<5;i++){ (function(i){ setTimeout(()=>{ console.log(i); }, 0); })(i) }
for (var i = 0; i < 5; i++) { (() => { var privateI = i; setTimeout(() => { console.log(privateI); }, 0); })() }
第二种 使用let
for(let i=0;i<5;i++){ setTimeout(()=>{ console.log(i); }, 0); }
第三种 使用setTimeout的第三个参数
for(var i=;i<5;i++){ setTimeout(()=>{ console.log(i); }, 0, i); }
第四种 使用Promise
for(var i=;i<5;i++){ Promise.resolve(i).then(i=>{ setTimeout(()=>{ console.log(i); }, 0); }) }
第五种 try catch
for (var i = 0; i < 5; i++) { try { throw i } catch (i) { setTimeout(() => { console.log(i); }, 0); } }