2014-02-17 95 views
0

我無法停止在JavaScript中的setInterval,這裏是我的代碼:ClearInterval不會停止計時器

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

我會用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); 

更多的例子和理由,爲什麼你最好不setIntervalhttp://www.erichynds.com/blog/a-recursive-settimeout-pattern

此外,setTimeout也沒有內存問題,因爲它將稍後運行的函數放入隊列中,但它會立即返回,即沒有堆棧框等待該功能完成。