setTimeout 與 setInterval

setTimeout 與 setInterval 實現回調本質上區別:
setTimeout(function(){
/* Some long block of code ... */
setTimout(arguments.callee,10);
},10);
setInterval(function(){
/* Some long block of code ... */
},10);
setTimeout代碼至少每隔10ms以上才執行一次;
因此:若是一個計時器被阻塞執行,它將會延遲,直到下一個可執行點
(這可能比指望的時間更長)
setInterval固定每隔10ms將嘗試執行,無論它的回調函數的執行狀態。
因此:setInterval的回調可能被不停的執行,中間沒間隔
(若是回調執行的時間超過預約等待的值)node

 

    // 天亮了
    var fade = function (node) {
      var level = 1;
      var hex = level.toString(16);
      var step = function () {
        hex = level.toString(16);
        node.style.backgroundColor = "#" + hex + hex + hex;
        if (level < 15) {
          level++;
          setTimeout(step, 60);
        } else {
          console.log("End");
        }
      }
      step();
    }
    console.time('time');
    fade(document.body);
    console.timeEnd('time');
View Code
相關文章
相關標籤/搜索