Sobes.tech
Junior

Hogyan működik a setTimeout függvény JavaScriptben?

sobes.tech MI

Válasz az MI-től

A setTimeout egy függvény vagy kódrészlet végrehajtását tervezi a megadott millimásodperc után.

Amikor a setTimeout-ot meghívják, a böngésző (vagy a Node.js futtatókörnyezet) létrehoz egy időzítőt. A setTimeout-nak átadott függvény a megadott késleltetési idő elteltével kerül a callback sorba (task queue).

A JavaScript egyszálú. A fő végrehajtó szál (main thread) szekvenciálisan hajtja végre a kódot. Amikor a fő szál befejezi a jelenlegi feladatokat, ellenőrzi a callback sort. Ha vannak benne függvények (például, amelyeket a setTimeout késleltetett), és a fő szál szabad, kiválasztja és végrehajtja az elsőt.

Ez azt jelenti, hogy a setTimeout(fn, 0) nem garantálja az fn azonnali végrehajtását. A lehető leggyorsabban végrehajtódik, de csak a jelenlegi kód végrehajtása után.

Szintaxis:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: A végrehajtandó függvény.
  • milliseconds: A millimásodpercek száma a függvény végrehajtása előtt. Ha kihagyják, alapértelmezett értéke 0.
  • param1, param2, ...: Opcionális argumentumok, amelyeket a függvénynek átadnak a híváskor.

Példa:

// "Szia!" kiírása 2 másodperc múlva
setTimeout(function() {
  console.log("Szia!");
}, 2000);

// Argumentumok átadása
function mutatUzenet(nev) {
  console.log("Szia, " + nev + "!");
}

setTimeout(mutatUzenet, 1000, "Világ"); // 1 másodperc múlva kiírja: "Szia, Világ!"

A setTimeout visszaad egy számos ID-t, amit a clearTimeout segítségével lehet a tervezett végrehajtás megszakítására használni.

A clearTimeout használatának példája:

let timerId = setTimeout(function() {
  console.log("Ez a sor nem fog megjelenni");
}, 3000);

console.log("Időzítő indítva...");

// Időzítő törlése
clearTimeout(timerId);

console.log("Időzítő törölve.");

Fontos pontok:

  • A késleltetés nem garantált pontosan, különösen nagy terhelés esetén a fő szálon. A megadott idő a minimális késleltetés, mielőtt a függvény a callback sorba kerül.
  • Node.js-ben a timer-eket az eseményhurkok (event loop) kezelik, hasonlóan a böngészőhöz.