Sobes.tech
Junior

Jak funguje funkce setTimeout v JavaScriptu?

sobes.tech AI

Odpověď od AI

setTimeout naplánuje vykonání funkce nebo části kódu po uplynutí zadaného počtu milisekund.

Při volání setTimeout vytvoří prohlížeč (nebo prostředí Node.js) časovač. Funkce předaná do setTimeout je po uplynutí zadané prodlevy zařazena do fronty callbacků (task queue).

JavaScript je jednovláknový. Hlavní vlákno (main thread) vykonává kód sekvenčně. Když hlavní vlákno dokončí aktuální úkoly, zkontroluje frontu callbacků. Pokud jsou v ní funkce (například odložené pomocí setTimeout) a hlavní vlákno je volné, vytáhne a vykoná první.

To znamená, že setTimeout(fn, 0) nezaručuje okamžité vykonání fn. Bude provedeno co nejdříve, ale až po dokončení aktuálního kódu v hlavním vlákně.

Syntaxe:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Funkce, kterou chcete vykonat.
  • milliseconds: Počet milisekund před vykonáním funkce. Pokud je vynecháno, výchozí hodnota je 0.
  • param1, param2, ...: Nepovinné argumenty, které budou předány funkci při jejím volání.

Příklad:

// Vypíše "Ahoj!" za 2 sekundy
setTimeout(function() {
  console.log("Ahoj!");
}, 2000);

// Předání argumentů
function zobrazZpravu(jmeno) {
  console.log("Ahoj, " + jmeno + "!");
}

setTimeout(zobrazZpravu, 1000, "Svět"); // Vypíše "Ahoj, Svět!" za 1 sekundu

setTimeout vrací číselný ID časovače, který lze použít k zrušení naplánovaného vykonání pomocí clearTimeout.

Příklad použití clearTimeout:

let timerId = setTimeout(function() {
  console.log("Tento řádek se nezobrazí");
}, 3000);

console.log("Časovač spuštěn...");

// Zrušení časovače
clearTimeout(timerId);

console.log("Časovač zrušen.");

Důležité body:

  • Zpoždění není přesně garantováno, zejména při vysoké zátěži hlavního vlákna. Uvedený čas je minimální zpoždění před zařazením funkce do fronty callbacků.
  • V Node.js jsou časovače řízeny událostní smyčkou (event loop), podobně jako v prohlížeči.