javaScript中的setTimeout无法正常工作

Xam*_*eer 3 javascript settimeout

我知道有一个答案,但是!! 所有的答案在循环中只覆盖了一个setTimeout这个问题看起来与我有关如何在JavaScript循环中添加延迟? 但是在我的场景中我在脚本中有两个setTimeout,如何在时间上正确实现!该程序正常工作,但我想要的时间不正确!

function clickDate(i)
{
  setTimeout((function(){
  alert("4");
  })(),2000);
}
function clickButton(i)
{
  setTimeout((function(){
  alert("5");
})(),4000);
}

function doEverything(i)
{
  clickDate(i);
  clickButton(i);
}
for(var i = 0; i < 4; i++)
{
 doEverything(i);
}
Run Code Online (Sandbox Code Playgroud)

Kha*_*uri 7

当您将该函数传递给setTImeout时,您将立即调用该函数.删除额外的括号.

function clickDate(i)
{
  setTimeout(function(){
  alert("4");
  },2000);
}
function clickButton(i)
{
  setTimeout(function(){
  alert("5");
},4000);
}

function doEverything(i)
{
  clickDate(i);
  clickButton(i);
}
for(var i = 0; i < 4; i++)
{
 doEverything(i);
}
Run Code Online (Sandbox Code Playgroud)

编辑

有点不清楚你希望你的代码在你i进入你的函数时看到的确切内容我假设你想以某种方式使用它.目前,您正在创建一次性全部启动的超时.如果您希望它们按顺序启动,您需要错开延迟时间.下面的代码每2秒记录一次"4",每隔"4"秒记录一次"5",将延迟时间乘以i+1.

// Currently this code displays a 4 every 2 seconds and a 5 every 4 seconds
function clickDate(i)
{
  setTimeout(function(){
  console.log("4");
  },2000 * (i+1));
}
function clickButton(i)
{
  setTimeout(function(){
  console.log("5");
},4000 * (i+1));
}

function doEverything(i)
{
  clickDate(i);
  clickButton(i);
}
for(var i = 0; i < 4; i++)
{
 doEverything(i);
}
Run Code Online (Sandbox Code Playgroud)