异步加载,和闭包,直接上图。
for(var i=0;i<5;i++){ setTimeout(function(){ console.log(i); },1000); }
因为异步加载的原因,定时器会同时执行5次,并且i 最后都为5,解决的办法。
第一种办法,通过函数传递参数
for(var i=0;i<5;i++){ test(i) } var test = function(i){ setTimeout(function(){ console.log(i); },1000); };
第二种方法,闭包的方法
for(var i=0;i<5;i++){ (function(i){ setTimeout(function(){ console.log(i); },1000) })(i) }
第三种方法:应用es6 let
for(let i=0;i<5;i++){ setTimeout(function(){ console.log(i); },1000) }