Javascript clearInterval不是正在清除setInterval

Javascript clearInterval不是正在清除setInterval,javascript,jquery,setinterval,clearinterval,Javascript,Jquery,Setinterval,Clearinterval,我做了一个记忆游戏,计时器从10分钟开始,每秒钟倒计时到0。此函数只调用一次,并具有以下setInterval函数: game.countdown = setInterval(function() { if(game.timeLeft <= 0){ gameEnded = true; } if(!gameEnded){

我做了一个记忆游戏,计时器从10分钟开始,每秒钟倒计时到0。此函数只调用一次,并具有以下setInterval函数:

game.countdown = setInterval(function() {
                    if(game.timeLeft <= 0){
                        gameEnded = true;
                    }

                    if(!gameEnded){
                        // lower one second
                        game.timeLeft--;

                        var timespan = document.querySelector('.timeleft');

                        var minutes =  pad(Math.floor((game.timeLeft / 60)),2 );
                        var newSeconds =  pad(Math.floor(game.timeLeft - (minutes * 60)),2 );

                        function pad(num, size) {
                            var s = num+"";
                            while (s.length < size) s = "0" + s;
                            return s;
                        }

                        var niceTime = minutes + ":" + newSeconds;

                        timespan.innerHTML = niceTime;

                        // Then alter time bar on .innertimer
                        // Calculate percentage starting at 0%
                        var percentageDone = (Math.floor((10*60 - game.timeLeft) / (10*60) * 10000) / 100);
                        $(".timer").css({"background": "-webkit-linear-gradient(left, white " + percentageDone + "%, green " + percentageDone + "%)"});
                    }
                }, 1000);
然后,当它进入下一个级别时,它会再次调用setInterval函数,并将其再次存储在game.countdown中。但现在每秒钟需要2秒。下一关是3秒。您可以看到有多个setInterval在工作,因为它不是同时完成的


希望有人能真正帮助我调试这个问题。

我为解决这个问题所做的工作如下。只有在满足以下条件时,才会调用间隔:

if (undefined == game.countdown){

这样,如果定义了倒计时,它将再次调用它。由于我存储的是game.timeLeft而不是函数本身,所以我可以重新填充game.timeLeft。

我为解决这个问题所做的工作如下。只有在满足以下条件时,才会调用间隔:

if (undefined == game.countdown){

这样,如果定义了倒计时,它将再次调用它。由于我正在存储game.timeLeft而不是在函数本身中,我可以重新填充game.timeLeft.

您确定调用了
clearInterval
吗?当这种情况发生时,查看逻辑可能会有所帮助。我在clearInterval和clearInterval被调用之前的行中添加了一个警报。如果我发出警报(“game.countdown:+JSON.stringify(game.countdown,null,4));然后在第一级,它给出了未定义的。在设定间隔之前。然后第二个级别为1,第三个级别为5。是否可能setInterval最初被触发两次,因此当调用clearInterval时,它只调用其中一个间隔?您可以通过在setInterval回调中抛出一些console.log()跟踪语句来测试这一点。您确定正在调用
clearInterval
?当这种情况发生时,查看逻辑可能会有所帮助。我在clearInterval和clearInterval被调用之前的行中添加了一个警报。如果我发出警报(“game.countdown:+JSON.stringify(game.countdown,null,4));然后在第一级,它给出了未定义的。在设定间隔之前。然后第二个级别为1,第三个级别为5。是否可能setInterval最初被触发两次,因此当调用clearInterval时,它只调用其中一个间隔?您可以通过在setInterval回调中抛出一些console.log()跟踪语句来测试这一点。