clearTimeout在递归函数中不工作-javascript

clearTimeout在递归函数中不工作-javascript,javascript,settimeout,cleartimeout,Javascript,Settimeout,Cleartimeout,这是我正在使用的代码。当ticks变为5时,递归函数应停止清除主线程超时。任何人都可以帮忙 var mainThread; var ticks = 0; function tickTimer() { clearTimeout(mainThread); if (ticks >= 5) { endGame(); } else { mainThread = setTimeout(function ()

这是我正在使用的代码。当ticks变为5时,递归函数应停止清除主线程超时。任何人都可以帮忙

var mainThread;  
var ticks = 0;  
function tickTimer() {  
    clearTimeout(mainThread);  
    if (ticks >= 5) {  
        endGame();  
    }  
    else {  
        mainThread = setTimeout(function () {  
            ticks++;  
            tickTimer();  
        }, 1000);  
    }  
}  
如果有任何问题,请告诉我。 提前谢谢。

您是否声明了主线程?像这样

var mainThread = null;
function tickTimer() {  
    clearTimeout(mainThread);
    mainThread = null;  
    if (ticks >= 5) {  
        endGame();  
    }  
    else {  
        mainThread = setTimeout(function () {  
            ticks++;  
            tickTimer();  
        }, 1000);  
    }  
}
而滴答声++不是滴答声-

请尝试以下方法:

function tickTimer() {       
    if (++ticks >= 5)  {
        clearInterval (mainThread); 
        endGame();  
    }  
} 

var  mainThread = setInterval(tickTimer, 1000);
var ticks = 0;

我想只要把你的计时器作为论据就行了

function tickTimer(timer) {  
    timer && clearTimeout(timer);  
    if (ticks >= 5) {  
        endGame();  
    }  
    else {  
        var timer = setTimeout(function () {  
            ticks--;  
            tickTimer(timer);  
        }, 1000);  
    }  
}  

不要使用全局作用域,你应该在函数被触发时初始化变量ticks。

请尝试替换ticks-to ticks++

你正在减少ticks的值,但如果值变大或等于5,游戏就结束了。正如@UweB提到的,if条件不应该是if ticks==5{endGame;}因为Tiks>=5总是返回true?考虑使用,而不是重复调用StimeTimeUT。太棒了!谢尔。成功了。顺便说一句,Loxy给出了相同类型的答案。“并且正在发挥作用。”sheelpriy将你的洞察力添加到某人的答案中是非常棒的。但如果有的话,一定要努力给予表扬。
you can try this. all you need to do is clear interval every time tickTimer function is called.

var  mainThread = setInterval(tickTimer, 1000);
var ticks = 0;

function tickTimer() {       
    if (++ticks >= 5)  {
        clearInterval (mainThread); 
        endGame();  
    }  
}