如何在JavaScript中停止递归函数?

如何在JavaScript中停止递归函数?,javascript,jquery,animation,recursion,Javascript,Jquery,Animation,Recursion,我一直在寻找停止setTimeout调用递归函数的正确方法。我希望能够重新启动动画,而不必等待动画完成 任何帮助都会很棒 var viewArray=[1,2,3,4,5,6,7,8,9,10]; var=0; 函数animator(){ 如果(!已启动){ console.log(“开始…”); 开始=1; var i=0; 计数=1; (函数迭代器(){/=viewArray.length){ 开始=0; }//当动画完成(数字达到10)时,允许“开始动画”按钮再次工作 } })(); }否

我一直在寻找停止setTimeout调用递归函数的正确方法。我希望能够重新启动动画,而不必等待动画完成

任何帮助都会很棒

var viewArray=[1,2,3,4,5,6,7,8,9,10];
var=0;
函数animator(){
如果(!已启动){
console.log(“开始…”);
开始=1;
var i=0;
计数=1;
(函数迭代器(){/=viewArray.length){
开始=0;
}//当动画完成(数字达到10)时,允许“开始动画”按钮再次工作
}
})();
}否则{
console.log(“等待…”);//禁用按钮
}
开始=1;
}

启动动画
停止动画

您可以使用状态轻松解决此问题。只需在代码中添加一个名为

  var isRunning = false;

启动动画时,将其设置为
true
,并将其设置为
false
以停止动画。然后在
迭代器
函数中,检查
isRunning
是否为
false
。如果
isRunning===false
,则不调用下一个
setTimeout
,从而停止动画

你可以用state轻松解决这个问题。只需在代码中添加一个名为

  var isRunning = false;

启动动画时,将其设置为
true
,并将其设置为
false
以停止动画。然后在
迭代器
函数中,检查
isRunning
是否为
false
。如果
isRunning===false
,则不调用下一个
setTimeout
,从而停止动画

我可能会在interval函数之外使用setInterval/clearInterval。当你考虑它时,你肯定想要周期性的间隔而不是单一的超时

所以基本上:

var something;

function start() {
  something = setInterval(interval, 1000);
}

function interval() {
  //animation code
}

function stop() {
  clearInterval(something);
}

我可能会在interval函数之外使用setInterval/clearInterval。当你考虑它时,你肯定想要周期性的间隔而不是单一的超时

所以基本上:

var something;

function start() {
  something = setInterval(interval, 1000);
}

function interval() {
  //animation code
}

function stop() {
  clearInterval(something);
}

检查调用setTimeout为同一个函数设置新的超时在技术上不是递归函数。我有,但我认为我没有正确实现它。我遗漏了一些东西:(代码中没有对clearTimeout的调用,所以是的,您遗漏了一些东西。)您是否存储了setTimeout返回的计时器id,以便将其传递给clearTimeout?@GolezTrol-函数使用setTimeout调用自身的技术术语是“递归”。请检查调用setTimeout为同一函数设置新的超时从技术上讲不是递归函数。我有,但我认为我没有正确实现它。我遗漏了一些东西:(代码中没有调用clearTimeout,所以是的,您遗漏了一些东西。)您是否存储了setTimeout返回的计时器id,以便可以将其传递给clearTimeout?@GolezTrol-函数使用setTimeout调用自身的技术术语是“递归”。