我在Javascript中有一个像这样运行的递归类型函数:

function loadThumb(thumb) {
    rotate=setTimeout(function() {
        loadThumb(next);
    }, delay);
}

注意:我简化了功能,使其更易于阅读。

我有这样的“a”标签
<a href="#" onclick="loadThumb(3); clearTimeout(rotate);">Load thumb 3</a>

但是,它们不会清除计时器,无论调用的clearTimeout()如何,计时器都会继续在函数中循环。

有什么想法吗?我认为这可能与范围问题或类似问题有关。

最佳答案

是的,您需要旋转一个全局变量。只需在函数外部声明即可,如下所示:

var rotate;
var delay = 1000;

function loadThumb(thumb) {
    alert("loading thumb: " + thumb);
    rotate = setTimeout(function() {
        loadThumb(thumb + 1);
    }, delay);
}

另外,在调用loadThumb之前,您需要确保清除超时。否则,您将清除刚刚启动的计时器。
<a href="#" onclick="clearTimeout(rotate); loadThumb(3);">Load thumb 3</a>

fiddle :http://jsfiddle.net/63FUD/

10-05 20:42