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.