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#中是否存在行为或者我是否有点生疏。
谢谢!
答案 0 :(得分:1)
实际上非常简单。 for
循环为所有五个值安排timer
函数。然后计时器功能开始打印数字。现在它们被打印1秒的原因是i*1000
setTimeout
。结果,1个将在安排后1秒打印,2个将在安排后2秒打印,大约 1秒后安排1,等等。
请参阅下面的代码段以了解其工作原理。请注意,setTimeout
不会阻止for
循环的执行。
for (let i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
console.log("Print " + i + " after " + i +" seconds.");
}
console.log("for loop completed.");
&#13;
答案 1 :(得分:0)
setTimeout()
会将您的timer()
放入队列中。
for
循环几乎立即执行得很快,每个循环计时器()将被放入队列中,延迟时间分别为1,2,3,4,5秒。
console.log(i)
将打印1-5。
答案 2 :(得分:0)
答案 3 :(得分:-1)
我希望这就是你要找的东西 System.Threading.Thread.Sleep(1000 * I);