有人可以向我解释一下吗:
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])
}Run Code Online (Sandbox Code Playgroud)
为什么这会返回 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];\r\n\r\nfor (let i = 0; i < array.length; i++) {\r\n setTimeout(function () {\r\n console.log(array[i]);\r\n }, array[i] * 500)\r\n}Run Code Online (Sandbox Code Playgroud)\r\n0 将在 0 \xc3\x97 0.5 = 0 秒后回显。
\n\n1 将在 1 \xc3\x97 0.5 = 0.5 秒后回显。
\n\n2 将在 2 \xc3\x97 0.5 = 1 秒后回显。
\n\n4 将在 4 \xc3\x97 0.5 = 2 秒后回显,依此类推。
\n\n编辑:如果您询问0 1 1 0记录而不是记录的原因0 0 1 1,很可能是因为计算机需要一些小时间循环遍历数组,并且在到达最后的“0”之前,已经过去了1毫秒,所以它将是是时候记录“1”和“1”了。请注意,增加日志之间的延迟可以解决问题。