【发布时间】:2017-08-19 03:26:25
【问题描述】:
for (let i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
}
我在这里感到困惑的最重要的事情 - 为什么会打印 1,2,3,4,5 - 相隔一秒?而不是增加一秒,每次通过 for 循环时多花一秒?我还有另一个让我感到困惑的变体,我将 console.log(i) 作为 for 循环的最后一步,它只是立即发布 1-5。这里有什么帮助吗?
来自 C#,为了记录,不确定 C# 中是否存在这种行为,或者我只是有点生疏。
谢谢!
【问题讨论】:
-
因为每个 setTimeout 几乎并行运行,因为 setTimeout 是异步的
-
setTimeout没有阻塞,它只是表明它将在i*1000秒内运行该函数(异步)。基本上,如果您说某事将在 1 秒内运行,某事将在 2 秒内运行,那么两者之间只有 1 秒的差异。
标签: javascript for-loop