Sobes.tech
Junior

Kako funkcioniše funkcija setTimeout u JavaScript-u?

sobes.tech АИ

Одговор од АИ

setTimeout planira izvršenje funkcije ili dela koda nakon navedenog broja milisekundi.

Prilikom poziva setTimeout, pregledač (ili Node.js okruženje za izvršenje) kreira tajmer. Funkcija prosleđena u setTimeout se postavlja u red za izvršenje (task queue) nakon isteka navedenog vremena odlaganja.

JavaScript je jednostran. Glavni tok izvršenja (main thread) izvršava kod sekvencijalno. Kada glavni tok završi trenutne zadatke, proverava red za izvršenje. Ako u njemu postoje funkcije (npr. one odložene pomoću setTimeout) i glavni tok je slobodan, izvlači i izvršava prvu.

To znači da setTimeout(fn, 0) ne garantuje trenutnu izvršavanje fn. Ona će biti izvršena što je pre moguće, ali tek nakon završetka trenutnog izvršenja koda u glavnom toku.

Sintaksa:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Funkcija koja treba da se izvrši.
  • milliseconds: Broj milisekundi pre izvršenja funkcije. Ako je izostavljeno, podrazumevano je 0.
  • param1, param2, ...: Opcionalni argumenti koji će biti prosleđeni funkciji pri njenom pozivu.

Primer:

// Ispisaće "Zdravo!" nakon 2 sekunde
setTimeout(function() {
  console.log("Zdravo!");
}, 2000);

// Prosleđivanje argumenata
function prikaziPoruku(ime) {
  console.log("Zdravo, " + ime + "!");
}

setTimeout(prikaziPoruku, 1000, "Svet"); // Ispisaće "Zdravo, Svet!" nakon 1 sekunde

setTimeout vraća numerički ID tajmera, koji se može koristiti za otkazivanje planiranog izvršenja pomoću clearTimeout.

Primer korišćenja clearTimeout:

let timerId = setTimeout(function() {
  console.log("Ovaj red neće biti prikazan");
}, 3000);

console.log("Pokrenut tajmer...");

// Otkaži tajmer
clearTimeout(timerId);

console.log("Tajmer otkazan.");

Važne tačke:

  • Kašnjenje nije tačno garantovano, posebno pri velikom opterećenju glavnog toka. Naveden vreme je minimalno kašnjenje pre nego što funkcija bude stavljena u red za izvršenje.
  • U Node.js, tajmeri se upravljaju putem petlje događaja (event loop), slično kao u pretraživaču.