问题描述
|
我想在每次迭代中延迟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);