我在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)。
答案 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
也没有内存问题,因为它会在队列中放置一个稍后要运行的函数,但它会立即返回,即没有堆栈帧等待该函数完成。