我是JavaScript的新手,正在尝试在for循环内使用setTimeout调用函数。该循环针对nodeList的每个成员执行。
我发现,我使用setTimeout调用的函数实际上只在循环的最后一次迭代期间执行。在下面的示例中,我希望进行三个单独的setTimeout调用,但我发现前两个调用被忽略了。
我看到其他帖子描述了如何多次调用setTimeout。令我惊讶的是,如果我将它们从for循环中取出,多次调用将会起作用。
我就是弄不明白为什么在循环内和循环外调用它们会有所不同。
每种情况下 setInterval 调用都返回有效的返回值,只有在循环的最后一次迭代中,函数才会真正执行。
提前感谢您的任何帮助。
我发现,我使用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);
}
}
我看到其他帖子描述了如何多次调用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);
我就是弄不明白为什么在循环内和循环外调用它们会有所不同。
每种情况下 setInterval 调用都返回有效的返回值,只有在循环的最后一次迭代中,函数才会真正执行。
提前感谢您的任何帮助。
setTimeout(function () { takeStep(nextAnt, mouseclickX, mouseclickY, 10) }, 10);
。 - James Khoury