808 Stimmen

setTimeout oder setInterval?

Soweit ich das beurteilen kann, verhalten sich diese beiden Teile von Javascript auf die gleiche Weise:

Option A:

function myTimeoutFunction()
{
    doStuff();
    setTimeout(myTimeoutFunction, 1000);
}

myTimeoutFunction();

Option B:

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

Gibt es einen Unterschied zwischen der Verwendung von setTimeout y setIntervall ?

6 Stimmen

Wenn Sie möchten einige gute Details, wie Timer in JS arbeiten, schrieb John Resig eine gute Artikel zu diesem Thema

9 Stimmen

Es gibt auch den offensichtlichen Unterschied, dass setTimeout diese zusätzliche Codezeile erfordert, um sie weiterzugeben, was den Nachteil hat, dass es ein Wartungsproblem ist, aber den Vorteil, dass Sie den Zeitraum leicht ändern können

0 Stimmen

Versuchen Sie dies jsfiddle.net/pramendra/Y4vEV

6voto

Helgi Punkte 1557

Sowohl setInterval als auch setTimeout geben eine Timer-ID zurück, die Sie verwenden können, um die Ausführung abzubrechen, d. h. bevor die Timeouts ausgelöst werden. Zum Abbrechen rufen Sie entweder clearInterval oder clearTimeout wie folgt auf:

var timeoutId = setTimeout(someFunction, 1000);
clearTimeout(timeoutId);
var intervalId = setInterval(someFunction, 1000),
clearInterval(intervalId);

Außerdem werden die Zeitüberschreitungen automatisch aufgehoben, wenn Sie die Seite verlassen oder das Browserfenster schließen.

6voto

CatalinBerta Punkte 1266

Um es etwas anders zu betrachten: setInterval stellt sicher, dass ein Code in jedem gegebenen Intervall ausgeführt wird (d.h. 1000ms, oder wie viel man angibt), während setTimeout die Zeit festlegt, die gewartet wird, bis der Code ausgeführt wird. Und da es zusätzliche Millisekunden braucht, um den Code auszuführen, summiert sich das auf 1000ms, so dass setTimeout zu ungenauen Zeiten (über 1000ms) erneut ausgeführt wird.

Beispielsweise werden Timer/Countdowns nicht mit setTimeout, sondern mit setInterval ausgeführt, um sicherzustellen, dass keine Verzögerungen auftreten und der Code genau in dem angegebenen Intervall ausgeführt wird.

4voto

Gudradain Punkte 4343

Sie können bobince Antwort selbst validieren, wenn Sie das folgende Javascript ausführen oder dies überprüfen JSFiddle

<div id="timeout"></div>
<div id="interval"></div>

var timeout = 0;
var interval = 0;

function doTimeout(){
    $('#timeout').html(timeout);
    timeout++;
    setTimeout(doTimeout, 1);
}

function doInterval(){
    $('#interval').html(interval);
    interval++;
}

$(function(){
    doTimeout();
    doInterval();
    setInterval(doInterval, 1);
});

3voto

Nino Punkte 31

Nun, setTimeout ist in einer Situation besser, wie ich gerade erfahren habe. Ich verwende immer setInterval, das ich mehr als eine halbe Stunde im Hintergrund laufen ließ. Als ich wieder auf die Registerkarte wechselte, änderte sich die Diashow (auf der der Code verwendet wurde) sehr schnell, anstatt alle 5 Sekunden, wie es sein sollte. Es passiert tatsächlich wieder, wenn ich es weiter teste, und ob es der Fehler des Browsers ist oder nicht, ist nicht wichtig, denn mit setTimeout ist diese Situation völlig unmöglich.

2voto

testCoder Punkte 6817

Der Unterschied ist bei der Konsole offensichtlich:

enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X