【发布时间】:2021-09-12 15:10:18
【问题描述】:
我想使用 setTimeout 以降序打印数组。我不知道为什么下面的代码不能按降序工作。
let delay = 1000;
let array = [1, 2, 3, 4, 5];
for(let i = array.length; i > 0; i--) {
setTimeout(() => {
console.log(array[i - 1]);
}, delay * i);
}
预期输出为5 4 3 2 1,延迟一秒。但它正在打印1 2 3 4 5
如果我从setTimeOut() 中删除i,它将按预期输出,但不会出现延迟。
非常感谢您的帮助。 谢谢。
【问题讨论】:
-
这个jsfiddle.net/db5cghna 和这个jsfiddle.net/db5cghna/1 有帮助吗?
-
在每个 cicle 中,您都设置这样的延迟:
delay * i,i的范围从 5 到 1。这意味着您的超时将以相反的顺序到期:5000(设置在第一个周期)将在 4000(设置为第二个周期)后过期,依此类推。第一个到期的超时将是在最后一个周期设置的超时 (1000)。 -
@jabaa 是的,谢谢。
-
@Ibsn,谢谢。我理解错误。谢谢。
标签: javascript for-loop settimeout