Hier sind einige einfache Javascript-Code mit setTimeout
:Wird `setTimeout (func, 0)` und `setTimeout (func, 1)` als gleich betrachtet?
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();
}
Wenn ich es auf Chrome laufen oder Node.js, sind die Ergebnisse ähnlich:
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
Sie können sehen, Alle Tasks mit Timeout 0
und 1
sind vor dem Timeout 2
, was ich erwartet habe.
Aber die 0
und 1
sind miteinander gemischt, scheint, als hätten sie die gleiche Zeitüberschreitung. Was ich erwartet habe, ist alles 0
vor 1
.
Wie das zu verstehen?
Ist dies NodeJS oder Google Chrome? Beide haben unterschiedliche Timer-Implementierungen, die anders und an anderen Stellen spezifiziert sind. –
@Freewind: Gibt es bestimmte Gründe, warum Sie '0' vor' 1' erwartet haben? –
@Freewind: Dies ist ein wunderbares Gespräch über die Event-Schleife in Knoten, die Ihre Frage beantworten kann .. http://www.youtube.com/watch?v = 8aGhZQkoFbQ –