JS中如何解决for循环中的延迟执行问题

我们先来看一个例子
在JS方法里面设置一个for循环,输出每次循环的值,如下图

for (var i = 0; i < 5; i++) {
    setTimeout(function(){
        console.log(i)
    },1000);
}
image.png

我们可以根据闭包的知识来更改一下for循环中的逻辑,利用闭包将i的值传递给a

for (var i = 0; i < 5; i++) {
    (function(a){
        setTimeout(function(){
            console.log(a)
        },1000);
    }(i))
}

这次在运行程序我们就可以看到输出内容是0开始输出了


image.png
JS中刚刚的写法还可以按照下面的方式实现
for (var i = 0; i < 5; i++) {  
  setTimeout(fn(i),1000);  
}
function fn(a){
    return function(){
        console.log(a);
    }
}

结果如下图


image.png

JS中如果for循环中有异步方法,就需要用闭包的方式保留当前循环变量值

你可能感兴趣的:(JS中如何解决for循环中的延迟执行问题)