【发布时间】:2021-09-30 16:23:33
【问题描述】:
我想用 JavaScript 编写一个循环,它在每次迭代后都有延迟。我尝试增加数组中的元素。但它根本没有修改数组中的元素!
let A = [1, 2, 3, 4];
let N = A.length;
let f = i => {
setTimeout(
() => {
A[i] += 1;
if (++i < N) {
f(i);
}
},
100
);
}
f(0);
console.log(A);
预期的输出是[2, 3, 4, 5],但我得到的是[1, 2, 3, 4]。如果我在增量后添加console.log(A[i])
let A = [1, 2, 3, 4];
let N = A.length;
let f = i => {
setTimeout(
() => {
A[i] += 1;
console.log(A[i]);
if (++i < N) {
f(i);
}
},
100
);
}
f(0);
console.log(A);
它打印出预期值2 3 4 5。但是console.log(A) 仍然打印原始数组[1, 2, 3, 4]。 OTOH,如果我使用 for 循环,它就可以工作。
let A = [1, 2, 3, 4];
let N = A.length;
for (let i = 0; i < N; i++) {
A[i] += 1;
}
console.log(A);
我是否遗漏了一些明显的东西?
【问题讨论】:
标签: javascript arrays loops scope