使用setTimeout延迟循环迭代

问题描述

| 我想在每次迭代中延迟my0ѭ循环。我尝试了以下方法:
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);
}
有什么建议么?     

解决方法

        “ 3”速度慢,难以调试并且存在潜在的安全问题(取决于数据来自何处)。不要使用它。 (将字符串传递给
setTimeout
使用代理人的
eval
。) 而是将一个函数传递给
setTimeout
。您需要使用闭包来捕获所传递函数的当前值
o
。 您可能还应该在此处使用
for
循环,而不是
while
循环。语法更清晰。
function setupAnimationFactory(o) {
    return function() {
        setupAnimation(o);
    }
}

for (var o = 0; o < 4; o++){
    setTimeout(setupAnimationFactory(o),2000);
}
    ,        尝试这个:
var o = 1;
function repeatMe(){
    setupAnimation(o);
    o++;
    setTimeout(function(){repeatMe();},1000);
}

repeatMe();
    ,        如果您想使用第二种方法,这里是有效的Javascript
<script type=\"text/javascript\">

    var o = 1; 
    function repeatMe(){ 

    setupAnimation(o); 
    o++; 

    setTimout(repeatMe(),1000); 
    } 

    function setupAnimation(o){
        alert(o);
    }

    </script>

<a href=\'#\' onclick=\"repeatMe()\">Click Me</a>
    ,        
var o = 1;  //Global Variable
var animTimerId;  //Global Variable

function setupAnimation(o){
   // Your code goes here

   o++;
   if(o == 4){
     clearTimeout(animTimeoutId);
     break;
   }
}

function repeatMe(){
   animTimeoutId = setTimeout(\"setupAnimation(o)\",2000);
}
    ,        您可以使用此:
setTimeout(function(){ myFunction(parameter)},timeoutLength);
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...