Javascript 函数setTimeout在循环中

Javascript 函数setTimeout在循环中,javascript,Javascript,如果我在循环中使用setTimeout,那么只有在循环结束后,它才会同时执行所有操作。 正如许多文章所建议的那样,我试图将setTimeout放在一个单独的函数中,但它没有帮助。 代码非常简单: function foo(i) { setTimeout( function() {console.log(i);}, 2000); } for (let i=0; i<5; i++) { foo(i); } 函数foo(i) { setTimeout(function(){

如果我在循环中使用setTimeout,那么只有在循环结束后,它才会同时执行所有操作。 正如许多文章所建议的那样,我试图将setTimeout放在一个单独的函数中,但它没有帮助。 代码非常简单:

function foo(i)
{
    setTimeout( function() {console.log(i);}, 2000);
}

for (let i=0; i<5; i++)
{
    foo(i);
}

函数foo(i) { setTimeout(function(){console.log(i);},2000); }
对于(设i=0;i,这是因为进程注册表几乎在同一时间执行5 setTimeout

尝试使用以下不同的超时时间:

function foo(i)
{
    setTimeout( function() {console.log(i);}, 1000 * i);
}

for (let i=0; i<5; i++)
{
    foo(i);
}
函数foo(i) { setTimeout(函数(){console.log(i);},1000*i); }
对于(设i=0;i,这是因为进程注册表几乎在同一时间执行5 setTimeout

尝试使用以下不同的超时时间:

function foo(i)
{
    setTimeout( function() {console.log(i);}, 1000 * i);
}

for (let i=0; i<5; i++)
{
    foo(i);
}
函数foo(i) { setTimeout(函数(){console.log(i);},1000*i); }
对于(设i=0;i你也可以用一个生成器来实现。生成器可以在函数中途暂停

函数*生成器(){
设指数=1;

while(index你也可以用生成器来实现。生成器可以在函数执行的中途暂停

函数*生成器(){
设指数=1;

虽然(索引,因为您的4个setTimeOut是同时启动的)ure,因为JavaScript是异步的。这意味着您立即调用
foo
函数5次。或者说,与JavaScript对话:让我在2秒内打印出0,在2秒内打印出1…因此,在2秒之后,您将一个接一个地得到结果。建议阅读has部分嵌套的SetTimeout.4 setTimeOut是同时启动的,这是因为JavaScript是异步的。这意味着您要立即调用
foo
函数5次。或者说,跟JavaScript对话:让我在2秒内打印出0,在2秒内打印出1…所以在2秒之后,您会一个接一个地得到结果。建议阅读has-Nested SetTim部分Out.正在工作!1秒、2秒和3秒后打印不出来的原因是什么…?你有好的来源吗?@Ozhary OP如果你发现这个答案很有用,请点击答案左侧的复选标记接受它。这意味着它解决了你的问题。@Ozhary在原始帖子中你是queu立即执行5次setTimeout,延迟1秒,而这将考虑循环计数。
setTimeout(console.log,1000*i,i)
正在工作!1秒、2秒、3秒等后打印不出来的原因是什么?你有好的来源吗?@Ozhary OP如果你发现这个答案很有用,请点击答案左侧的复选标记接受它。这意味着它解决了你的问题。@Ozhary在原始帖子中你是q立即以1秒的延迟执行5次setTimeout,而这将考虑循环计数。
setTimeout(console.log,1000*i,i);