Sobes.tech
Junior

Cum funcționează funcția setTimeout în JavaScript?

sobes.tech AI

Răspuns de la AI

setTimeout planifică executarea unei funcții sau a unui fragment de cod după numărul specificat de milisecunde.

Când se apelează setTimeout, browser-ul (sau mediul de execuție Node.js) creează un temporizator. Funcția transmisă în setTimeout este plasată în coada de callback-uri (task queue) după expirarea timpului de întârziere specificat.

JavaScript este single-threaded. Thread-ul principal de execuție (main thread) execută codul secvențial. Când thread-ul principal termină sarcinile curente, verifică coada de callback-uri. Dacă există funcții în coadă (de exemplu, cele amânate cu setTimeout) și thread-ul principal este liber, extrage și execută prima funcție din coadă.

Aceasta înseamnă că setTimeout(fn, 0) nu garantează execuția imediată a funcției fn. Ea va fi executată cât mai curând posibil, dar doar după finalizarea execuției curente în thread-ul principal.

Sintaxă:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: Funcția care trebuie executată.
  • milliseconds: Numărul de milisecunde înainte de executarea funcției. Dacă este omis, implicit este 0.
  • param1, param2, ...: Argumente opționale care vor fi transmise funcției la apel.

Exemplu:

// Va afișa "Salut!" după 2 secunde
setTimeout(function() {
  console.log("Salut!");
}, 2000);

// Transmiterea argumentelor
function arataMesaj(nume) {
  console.log("Salut, " + nume + "!");
}

setTimeout(arataMesaj, 1000, "Lume"); // Va afișa "Salut, Lume!" după 1 secundă

setTimeout returnează un ID numeric al timer-ului, care poate fi folosit pentru anularea execuției planificate cu clearTimeout.

Exemplu de utilizare a clearTimeout:

let timerId = setTimeout(function() {
  console.log("Această linie nu va fi afișată");
}, 3000);

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

// Anulăm timer-ul
clearTimeout(timerId);

console.log("Timer anulat.");

Puncte importante:

  • Întârzierea nu este garantată exact, mai ales sub sarcină mare pe thread-ul principal. Timpul indicat este întârzierea minimă înainte ca funcția să fie plasată în coada callback-urilor.
  • În Node.js, timer-ele sunt gestionate de bucla de evenimente (event loop), similar cu browser-ul.