Sobes.tech
Junior

Wie funktioniert die Funktion setTimeout in JavaScript?

sobes.tech KI

Antwort von AI

setTimeout plantiert die Ausführung einer Funktion oder eines Codeabschnitts nach der angegebenen Anzahl von Millisekunden.

Beim Aufruf von setTimeout erstellt der Browser (oder die Node.js-Laufzeitumgebung) einen Timer. Die an setTimeout übergebene Funktion wird nach Ablauf der angegebenen Verzögerungszeit in die Callback-Warteschlange (task queue) eingereiht.

JavaScript ist single-threaded. Der Hauptausführungsthread (main thread) führt den Code sequenziell aus. Wenn der Hauptthread die aktuellen Aufgaben beendet, überprüft er die Callback-Warteschlange. Wenn dort Funktionen (z.B. verzögerte mit setTimeout) vorhanden sind und der Hauptthread frei ist, wird die erste Funktion aus der Warteschlange entnommen und ausgeführt.

Das bedeutet, dass setTimeout(fn, 0) nicht die sofortige Ausführung von fn garantiert. Sie wird so bald wie möglich ausgeführt, aber erst nach Abschluss des aktuellen Codes im Hauptthread.

Syntax:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Die auszuführende Funktion.
  • milliseconds: Die Anzahl der Millisekunden vor der Ausführung der Funktion. Wird sie weggelassen, sind es standardmäßig 0.
  • param1, param2, ...: Optionale Argumente, die an die Funktion beim Aufruf übergeben werden.

Beispiel:

// Gibt "Hallo!" nach 2 Sekunden aus
setTimeout(function() {
  console.log("Hallo!");
}, 2000);

// Argumente übergeben
function zeigeNachricht(name) {
  console.log("Hallo, " + name + "!");
}

setTimeout(zeigeNachricht, 1000, "Welt"); // Gibt "Hallo, Welt!" nach 1 Sekunde aus

setTimeout gibt eine numerische Timer-ID zurück, die zur Absage des geplanten Aufrufs mit clearTimeout verwendet werden kann.

Beispiel für die Verwendung von clearTimeout:

let timerId = setTimeout(function() {
  console.log("Diese Zeile wird nicht ausgegeben");
}, 3000);

console.log("Timer gestartet...");

// Timer abbrechen
clearTimeout(timerId);

console.log("Timer abgebrochen.");

Wichtige Punkte:

  • Die Verzögerung ist nicht exakt garantiert, insbesondere bei hoher Auslastung des Hauptthreads. Die angegebene Zeit ist die minimale Verzögerung, bevor die Funktion in die Callback-Warteschlange eingereiht wird.
  • In Node.js werden Timer vom Event Loop verwaltet, ähnlich wie im Browser.