今天,想实现一个功能:隔一秒中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);
}
执行结果如下:

本文探讨了使用for循环结合setTimeout实现隔秒打印递增数字的问题。初始尝试直接在循环内使用setTimeout导致所有回调引用同一个变量i,结果每次都打印最后一个值。通过创建闭包使每次迭代的i值成为独立变量,成功实现了预期效果。

1379

被折叠的 条评论
为什么被折叠?



