【发布时间】:2012-03-10 05:47:56
【问题描述】:
我是 javascript 新手,正在尝试使用 setTimeout 从 for 循环中调用函数。循环针对 nodeList 的每个成员执行。
我发现我用 setTimeout 调用的函数实际上只是在循环的最后一次迭代期间执行。在下面的示例中,我想对 setTimeout 进行三个单独的调用,但我发现前两个调用被忽略了。
function moveants(e, stepdistance) {
. . . . .
for(var i = 0; i < 3; i++)
{
var nextAnt = antgroup.childNodes[i]
nextAnt.count = 0;
nextAnt.member = i;
setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 0);
}
}
function takeStep(ant, destX, destY, stepDistance) {
. . . .
. . . .
if( condition )
{
return;
}
else
{
takeStep(ant, destX, destY, stepDistance);
}
}
我看到other posts 描述了多次调用 setTimeout。令人惊讶的是(对我来说),如果我像这样简单地将它们从 for 循环中取出,多个调用将起作用。
setTimeout(function () { takeStep(antgroup.childNodes[0],
mouseclickX, mouseclickY, 10) }, 10);
setTimeout(function () { takeStep(antgroup.childNodes[1],
mouseclickX, mouseclickY, 10) }, 10);
setTimeout(function () { takeStep(antgroup.childNodes[2],
mouseclickX, mouseclickY, 10) }, 10);
我只是不明白为什么在 for 循环中调用它们和在循环之外调用它们之间存在差异。
在每种情况下,我都从 setInterval 调用中获得了有效的返回值。只是只有 for 循环的最后一次迭代,函数才会真正执行。
提前感谢您的帮助。
【问题讨论】:
-
正如 Dark Slipstream 所说:你有 0 延迟超时 尝试延迟,例如
setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 10); -
我很抱歉。我也在循环内设置了 10 的延迟,但我不小心删除了帖子中的时间参数。
标签: javascript for-loop settimeout