gpt4 book ai didi

JavaScript setTimeout() 和数组

转载 作者:行者123 更新时间:2023-12-01 01:37:48 25 4
gpt4 key购买 nike

有人能给我解释一下吗:

const array = [0, 1, 2, 4, 8, 16, 32, 16, 8, 4, 2, 1, 0];

for (let i = 0; i < array.length; i++) {
setTimeout(function () {
console.log(array[i]);
}, array[i])
}

为什么这会返回 0 1 1 0 2 2 4 4 8 8 16 16 32,而不是逐个返回数组项?

最佳答案

数字一个接一个地出现。但是您将看不到这一点,因为您在它们之间设置了非常低的延迟。其中一些会一起出现。这些是 array[i] 具有相同值的那些。

为了更好地查看它们之间的延迟,我建议将 array[i] 替换为 array [i] * x,其中 x是一个数字。看看这个:

const array = [0, 1, 2, 4, 8, 16, 32, 16, 8, 4, 2, 1, 0];

for (let i = 0; i < array.length; i++) {
setTimeout(function () {
console.log(array[i]);
}, array[i] * 500)
}

0 将在 0 × 0.5 = 0 秒后回显。

1 将在 1 × 0.5 = 0.5 秒后回显。

2 将在 2 × 0.5 = 1 秒后回显。

4 将在 4 × 0.5 = 2 秒后回显,依此类推。

编辑:如果您询问记录 0 1 1 0 而不是 0 0 1 1 的原因,很可能是因为计算机需要一些时间循环遍历数组,并且在到达最后的“0”之前,已经过去了 1 毫秒,因此需要记录“1”和“1”。请注意,增加日志之间的延迟可以解决问题。

关于JavaScript setTimeout() 和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52679851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com