Suche…
Syntax
- timeoutID = setTimeout (Funktion () {}, Millisekunden)
- IntervallID = setInterval (Funktion () {}, Millisekunden)
- timeoutID = setTimeout (Funktion () {}, Millisekunden, Parameter, Parameter, ...)
- IntervallID = setInterval (Funktion () {}, Millisekunden, Parameter, Parameter, ...)
- clearTimeout (timeoutID)
- clearInterval (Intervall-ID)
Bemerkungen
Wenn die Verzögerung nicht angegeben ist, beträgt der Standardwert 0 Millisekunden. Die tatsächliche Verzögerung wird jedoch länger sein . Beispielsweise spezifiziert die HTML5-Spezifikation eine minimale Verzögerung von 4 Millisekunden.
Selbst wenn setTimeout
mit einer Verzögerung von Null setTimeout
wird, wird die von setTimeout
aufgerufene Funktion asynchron ausgeführt.
Beachten Sie, dass viele Operationen wie die DOM-Manipulation nicht unbedingt abgeschlossen sind, auch wenn Sie die Operation ausgeführt und mit dem nächsten Codesatz fortgefahren sind. Sie sollten daher nicht davon ausgehen, dass sie synchron ausgeführt werden.
Durch die Verwendung von setTimeout(someFunc, 0)
wird die Ausführung der someFunc
Funktion am Ende des Aufrufstacks der aktuellen JavaScript-Engine someFunc
, sodass die Funktion aufgerufen wird, nachdem diese Vorgänge abgeschlossen sind.
Es ist möglich , einen String mit JavaScript - Code (passieren setTimeout("some..code", 1000)
) anstelle der Funktion ( setTimeout(function(){some..code}, 1000)
). Wenn der Code in einen String eingefügt wird, wird er später mit eval()
analysiert. Zeichenfolgen-Timeouts werden aus Gründen der Leistung, Übersichtlichkeit und manchmal aus Sicherheitsgründen nicht empfohlen. Möglicherweise wird jedoch älterer Code angezeigt, der diesen Stil verwendet. Das Übergeben von Funktionen wurde seit Netscape Navigator 4.0 und Internet Explorer 5.0 unterstützt.
Intervalle
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
window.setInterval(waitFunc,5000);
Intervalle entfernen
window.setInterval()
gibt eine IntervalID
, die verwendet werden kann, um die Fortsetzung des Intervalls zu stoppen. Speichern Sie dazu den Rückgabewert von window.setInterval()
in einer Variablen und rufen Sie clearInterval()
mit dieser Variablen als einziges Argument auf:
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
var interval = window.setInterval(waitFunc,5000);
window.setTimeout(function(){
clearInterval(interval);
},32000);
Dies wird protokolliert. This will be logged every 5 seconds
alle 5 Sekunden This will be logged every 5 seconds
, aber nach 32 Sekunden wird es gestoppt. So wird die Nachricht 6 Mal protokolliert.
Timeouts entfernen
window.setTimout()
gibt eine TimeoutID
, die verwendet werden kann, um die Ausführung dieses Timeouts zu stoppen. Speichern Sie dazu den Rückgabewert von window.setTimeout()
in einer Variablen und rufen Sie clearTimeout()
mit dieser Variablen als einziges Argument auf:
function waitFunc(){
console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
clearTimeout(timeout);
}
var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);
Dadurch wird die Nachricht nicht protokolliert, da der Timer nach 3 Sekunden angehalten wird.
Rekursiver setTimeout
Um eine Funktion unbegrenzt zu wiederholen, kann setTimeout
rekursiv aufgerufen werden:
function repeatingFunc() {
console.log("It's been 5 seconds. Execute the function again.");
setTimeout(repeatingFunc, 5000);
}
setTimeout(repeatingFunc, 5000);
Im Gegensatz zu setInterval
wird dadurch sichergestellt, dass die Funktion auch dann ausgeführt wird, wenn die Laufzeit der Funktion länger ist als die angegebene Verzögerung. Ein regelmäßiges Intervall zwischen Funktionsausführungen wird jedoch nicht garantiert. Dieses Verhalten variiert auch, da eine Ausnahme vor dem rekursiven Aufruf von setTimeout
die Wiederholung verhindert, während setInterval
unabhängig von Ausnahmen setInterval
wiederholt wird.
setTimeout, Reihenfolge der Operationen, clearTimeout
setTimeout
- Führt eine Funktion aus, nachdem eine angegebene Anzahl von Millisekunden gewartet wurde.
- Wird verwendet, um die Ausführung einer Funktion zu verzögern.
Syntax: setTimeout(function, milliseconds)
oder window.setTimeout(function, milliseconds)
Beispiel: In diesem Beispiel wird nach 1 Sekunde "Hallo" an die Konsole ausgegeben. Der zweite Parameter ist in Millisekunden, also 1000 = 1 s, 250 = 0,25 s usw.
setTimeout(function() {
console.log('hello');
}, 1000);
Probleme mit setTimeout
Wenn Sie die setTimeout
Methode in einer for-Schleife verwenden :
for (i = 0; i < 3; ++i) {
setTimeout(function(){
console.log(i);
}, 500);
}
Dies gibt den Wert 3 three
dreimal aus, was nicht korrekt ist.
Problemumgehung für dieses Problem:
for (i = 0; i < 3; ++i) {
setTimeout(function(j){
console.log(i);
}(i), 1000);
}
Es wird der Wert 0
, 1
, 2
ausgegeben. Hier übergeben wir das i
als Parameter ( j
) an die Funktion.
Reihenfolge der Operationen
Aufgrund der Tatsache, dass Javascript ein einzelner Thread ist und eine globale Ereignisschleife verwendet, kann mit setTimeout
ein Element am Ende der Ausführungswarteschlange setTimeout
werden, indem setTimeout
Verzögerung setTimeout
. Zum Beispiel:
setTimeout(function() {
console.log('world');
}, 0);
console.log('hello');
Wird tatsächlich ausgegeben:
hello
world
Null Millisekunden bedeutet hier nicht, dass die Funktion innerhalb von setTimeout sofort ausgeführt wird. Je nach den auszuführenden Elementen in der Ausführungswarteschlange ist etwas mehr Zeit erforderlich. Dieser wird nur bis zum Ende der Warteschlange gedrückt.
Zeitüberschreitung abbrechen
clearTimeout (): stoppt die Ausführung der in setTimeout()
angegebenen Funktion
Syntax: clearTimeout (timeoutVariable) oder window.clearTimeout (timeoutVariable)
Beispiel:
var timeout = setTimeout(function() {
console.log('hello');
}, 1000);
clearTimeout(timeout); // The timeout will no longer be executed
Intervalle
Standard
Sie müssen die Variable nicht erstellen, es ist jedoch eine bewährte Methode, da Sie diese Variable zusammen mit clearInterval verwenden können, um das aktuell laufende Intervall zu stoppen.
var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */
Wenn Sie der doSomething-Funktion Parameter übergeben müssen, können Sie sie als zusätzliche Parameter an die ersten beiden Parameter von setInterval übergeben.
Ohne sich zu überlappen
setInterval wird wie oben alle 5 Sekunden ausgeführt (oder was auch immer Sie eingestellt haben), egal was passiert. Auch wenn die Funktion doSomething länger als 5 Sekunden ausgeführt wird. Das kann zu Problemen führen. Wenn Sie nur sicherstellen möchten, dass sich diese Pause zwischen den Runs von doSomething befindet, können Sie Folgendes tun:
(function(){
doSomething();
setTimeout(arguments.callee, 5000);
})()