2015-09-03 187 views
0

setInterval函數中的第二個參數用於延遲以毫秒爲單位的執行時間。如預期的那樣,1000毫秒會每秒觸發一次該功能。但是這裏有一個我不太瞭解的奇怪的東西。在第二個時間間隔中,我將delay參數設置爲1毫秒,並將其放入函數遞增數字和條件中,以檢查每個傳遞的1000數字。我期待它的行爲就像秒間隔計時器一樣。但它並不像我所希望的那樣運行。以毫秒爲單位檢測秒數

對此有任何解釋嗎?

// detect seconds in a second interval timer (works as expected) 
setInterval(function() { 
    console.log('passed second from the secondInterval'); 
}, 1e3); 

// detect seconds in a millisecond interval timer (I don't have any explanation for the behavior). 
(function() { 
    var i = 0; 
    setInterval(function() { 
     if (i === 0) { 
      i++; 
      return; 
     } 

     if (i % 1000 === 0) console.log('passed second from the millisecondInterval'); 
     i++; 
    }, 1); 
})(); 

檢查出的jsfiddle例子來看看我的意思 http://jsfiddle.net/dwh82zos/

+0

http://stackoverflow.com/questions/9647215/what-is-minimum-millisecond-value-of-settimeout –

+1

延遲以毫秒錶示,但不具有毫秒的準確度。把它看作一個建議。你真的想要網頁每秒運行代碼1000次嗎?真正的最小值可能大約爲10-15ms,取決於瀏覽器,操作系統等等。 – Cameron

+0

@Cameron如果您正在處理動畫幀並且確實需要它非常準確,那麼這將非常糟糕。 – Husamuddin

回答

1

出現這種情況。句子不會每秒記錄一次,也不會記錄您的機器。內存不足,無法解析,每1ms首次執行6次操作,每1ms執行第二次3次操作。 看看這個What is minimum millisecond value of setTimeout?它是關於setTimeout,但它很有用。