今天,想实现一个功能:隔一秒中console顺序打印01234,开始我的思路是用for循环,里面用setTimeout实现隔一秒中打印一次,代码如下:
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i);
},1000*i);
}
但是结果却是这样
每隔一秒打印一个“5”
出现这个原因是因为setTimeout是隔多长时间将任务加入任务队列,而for循环执行却是非常快,远远小于一秒中,所以造成执行任务的时候,i已经变成5了;想要解决这个问题及时将i变成一个局部变量,专属于每一个任务,代码如下:
for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log(i);
},1000*i);
})(i);
}
执行结果如下: