2016-06-22 11 views
5

Oto niektóre proste kodu JavaScript za pomocą setTimeout:Czy "setTimeout (func, 0)" i "setTimeout (func, 1)" są uważane za takie same?

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(); 
 
}

Kiedy uruchamiam go na Chrome lub node.js, wyniki są podobne:

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 

Można zobaczyć wszystkie zadania z limitem czasu 0 i 1 są przed upływem limitu czasu 2, czego się spodziewałem.

Ale 0 i 1 są zmieszane ze sobą, wydaje się, że mają ten sam limit czasu. Wszystko, czego się spodziewałem, to 0 przed.

Jak to zrozumieć?

+0

Czy ta NodeJS lub Google Chrome? Oba mają różne implementacje timera, które są określone inaczej iw innych miejscach. –

+0

@Freewind: Jakieś konkretne powody, dla których oczekiwałeś '0' przed' 1'? –

+0

@Freewind: To jest wspaniała rozmowa na temat pętli zdarzeń w węźle, która może odpowiedzieć na twoje pytanie..https: //www.youtube.com/watch? V = 8aGhZQkoFbQ –

Odpowiedz

0

Rzeczywiście, drugie parametry setTimeout mają ograniczenie wartości minimalnej. W przypadku firefox wartość wynosi 4ms. Jeśli przekazana wartość jest mniejsza niż wartość minimalna, zostanie użyte minimum.

chodzi o Twoje pytanie, myślę, że ten artykuł jest pomocny: http://javascript.info/tutorial/events-and-timing-depth

+0

Uruchom na firefox. Zadania o mniejszym limicie czasu są wykonywane jako pierwsze, nawet jeśli mają one wartość <= 4' – Freewind