javascript - 如何在 for 循环中使用 setInterval 函数

标签 javascript for-loop closures setinterval

我正在尝试在给定可变项目列表的情况下运行多个计时器。代码看起来像这样:

var list = Array(...);

for(var x in list){
    setInterval(function(){
        list[x] += 10;
        console.log(x + "=>" + list[x] + "\n");
    }, 5 * 1000);
}

上述代码的问题在于,唯一更新的值是列表末尾的项目乘以列表中的项目数。

任何人都可以提供解决方案和一些解释,以便我知道为什么会这样吗?

最佳答案

var list = [1, 2, 3, 4, 5];

for (var i = 0, len = list.length; i < len; i += 1) {
    (function(i) {
        setInterval(function() {
            list[i] += 10;
            console.log(i + "=>" + list[i] + "\n");
        }, 5000)
    })(i);
}

这是工作代码:

var list = [1, 2, 3, 4, 5];

for (var i = 0, len = list.length; i < len; i += 1) {
    (function(i) {
        setInterval(function() {
            list[i] += 10;
            console.log(i + "=>" + list[i] + "\n");
        }, 5000)
    })(i);
}

此处索引i 存储在匿名函数中,因此它不会被连续循环覆盖。代码中的 setInterval 函数仅保留对 i 的最后一个值的引用。

关于javascript - 如何在 for 循环中使用 setInterval 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749090/

相关文章:

javascript - 当 iframe url 更改时如何更改包装器

javascript - 为什么对象值被插入数组 3 次?

Javascript for 循环在结束之前停止

ios - 将模型类传递给嵌套方法时出现 Swift 泛型方法问题

c++ - 这些函数为什么不衰减到函数指针?

更新多个表行内容时的 JavaScript 加载器

java - Jmeter:如何在单个请求中传递数组值?

r - 如何将值存储在R中for循环内的向量中

java - "loops"是 Java 中的 "Conditional Statement"类型吗?

closures - 为什么函数参数的生存期与函数内绑定(bind)的生存期不同?