我们先来看一个例子
在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循环中有异步方法,就需要用闭包的方式保留当前循环变量值
网友评论