javascript - 使用 setTimeout 延迟循环迭代

标签 javascript

我想在每次迭代时延迟我的 while 循环。我尝试了以下方法:

var o = 1;
while(o<4){
    setTimeout("setupAnimation(o)",2000);
    //setupAnimation(o); //<--this works but everything happens att the same time
    o++;
}

我也试过这样写,也没用:

var o = 1;
function repeatMe(){
    setupAnimation(o);
    o++;
    setTimout('repeatMe()',1000);
}

有什么建议吗?

最佳答案

eval 速度慢、难以调试并且存在潜在的安全问题(取决于数据的来源)。不要使用它。 (将字符串传递给 setTimeout 通过代理使用 eval。)

改为将函数传递给 setTimeout。您需要使用闭包为您传递的函数捕获 o 的当前值。

您可能还应该在这里使用 for 循环而不是 while 循环。语法更清晰。

function setupAnimationFactory(o) {
    return function() {
        setupAnimation(o);
    }
}

for (var o = 0; o < 4; o++){
    setTimeout(setupAnimationFactory(o),2000);
}

关于javascript - 使用 setTimeout 延迟循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6344000/

相关文章:

javascript - jQuery、Prototype、Extjs、mootools、Scriptaculous、Spry、YUI、DOJO 框架之间有什么区别?

javascript - 将从服务器接收到的对象转换为具有可观察属性的对象

javascript - 如何计算字符串javascript函数中的特殊字符,该函数只接受@#

javascript - setTimeout() 使用 iframe 移动 div 仅在 Firefox 中导致闪烁

javascript - Firebase http 函数在 http 请求库返回数据之前完成

javascript - 使用 jWYSIWYG 在线编辑器处理事件

javascript - reactjs render() 在 promise 解决后未触发 this.setState 被重新分配

JavaScript:我在 JavaScript 中练习递归,并试图从条件返回 true 或 false,但什么也没看到

javascript - AngularJS 重定向时调用函数

javascript - 如何让表中的更改项与数据库同步?