2016-06-22 53 views
5

下面是使用setTimeout一些簡單的Javascript代碼:`setTimeout(func,0)`和`setTimeout(func,1)`是否一樣?

function setTimeouts() { 
 
    setTimeout(function() { console.log(2); }, 2); 
 
    setTimeout(function() { console.log(1); }, 1); 
 
    setTimeout(function() { console.log(0); }, 0); 
 
} 
 

 
for (var i = 0; i < 10; i++) { 
 
    setTimeouts(); 
 
}

當我在瀏覽器或Node.js的運行它,結果是相似的:

1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
1 
0 
2 
2 
2 
2 
2 
2 
2 
2 
2 
2 

你可以看到所有超時時間爲01的任務都在超時前2之前,這是我的預期。

01是相互混合,似乎他們有相同的超時時間。我期望的是在1之前的所有0

如何理解?

+0

這是NodeJS還是Google Chrome?兩者都有不同的定時器實現,這些定時器實現在不同的地方以及在其他地方都有所指定 –

+0

@Freewind:你爲什麼在'1'之前期望'0'的具體原因? –

+0

@Freewind:這是一個關於節點中的事件循環的精彩演講,可以回答你的問題.https://www.youtube.com/watch?v = 8aGhZQkoFbQ –

回答

0

實際上,setTimeout的第二個參數具有最小值限制。對於Firefox來說,這個值是4ms。如果傳遞的值小於最小值,則將使用最小值。

關於您的問題,我認爲這篇文章有幫助:http://javascript.info/tutorial/events-and-timing-depth

+0

請在Firefox上運行。具有較小超時的任務首先被執行,即使它們'<= 4' – Freewind

相關問題