停止执行递归javascript函数

DA.*_*DA. 2 javascript recursion

使用jQuery,我构建了一个图像/幻灯片旋转器.基本设置是(伪代码):

function setupUpSlide(SlideToStartWith){
    var thisSlide = SlideToStartWith;
    ...set things up...
    fadeInSlide(thisSlide)
}

function fadeInSlide(thisSlide){
    ...fade in this slide...
    fadeOutSlide(thisSlide)
}


function fadeOutSlide(thisSlide){
    ...fade out this slide...
    thisSlide.fadeOut(fade, function() {
    var timeout2 = setTimeout(setupUpSlide(nextSlide),100);
    }
Run Code Online (Sandbox Code Playgroud)

我调用第一个函数并传入一个特定的幻灯片索引,然后它调用函数链,然后再调用第一个函数再次传入下一个索引.然后无限重复(当它到达最后一项时重置索引).

这很好用.

我现在要做的是允许某人通过点击特定幻灯片编号来覆盖幻灯片放映.因此,如果显示幻灯片#8并且我单击#3,我希望递归停止,然后调用幻灯片#3中传递的初始函数,然后,幻灯片将再次启动该过程.

但我不知道该怎么做.如何正确"打破"递归脚本.我应该创建某种全局'监视'变量,如果在任何时候'true'将返回:false并允许新函数执行?

更新:添加了更详细的代码显示setTimeout调用

Mar*_*ers 7

使用递归来实现幻灯片放映可能不是一个好主意,因为它最终会导致堆栈溢出.

改为使用超时.

setTimeout() - 在将来的某个时间执行代码

clearTimeout() - 取消setTimeout()

间隔(感谢Ricket指出这一点!):

setInterval()方法以指定的时间间隔(以毫秒为单位)调用函数或计算表达式.

setInterval()方法将继续调用该函数,直到调用clearInterval()或关闭窗口.