ClearInterval不会停止计时器

时间:2014-02-17 13:49:55

标签: javascript setinterval

我在javascript中停止setInterval时遇到了问题,这是我的代码:

    var self = this;
    self.pt = setInterval(function() {
        if (self.startTime <= 0) {
            console.log(self.pt, self.startTime);
            self.updateScore();
            self.updateClock();
            self.showScore();
            clearInterval(self.pt);
        } else {

            self.startTime--;
            self.totalScore++;
            self.updateScore();
            self.updateClock();
        }

    }, 20);

clearInterval完全被忽略。任何线索? 控制台日志记录一个递增的数字和0,(1234,0)。

1 个答案:

答案 0 :(得分:0)

我使用setTimeout()和递归代替setInterval()来处理此问题:

var self = this;
setTimeout(function periodicFunc() {
    if (self.startTime <= 0) {
        console.log(self.startTime);
        self.updateScore();
        self.updateClock();
        self.showScore();
    } else {
        self.startTime--;
        self.totalScore++;
        self.updateScore();
        self.updateClock();
        setTimeout(periodicFunc, 20);
    }
}, 20);

有关为什么在没有setInterval的情况下过得更愉快的更多示例和原因,请参阅http://www.erichynds.com/blog/a-recursive-settimeout-pattern

setTimeout也没有内存问题,因为它会在队列中放置一个稍后要运行的函数,但它会立即返回,即没有堆栈帧等待该函数完成。