我正在尝试在给定可变项目列表的情况下运行多个计时器。代码看起来像这样:
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/