Sobes.tech
Junior

Come funziona la funzione setTimeout in JavaScript?

sobes.tech AI

Risposta dell'AI

setTimeout pianifica l'esecuzione di una funzione o di un frammento di codice dopo il numero specificato di millisecondi.

Quando si chiama setTimeout, il browser (o l'ambiente di esecuzione Node.js) crea un timer. La funzione passata a setTimeout viene inserita nella coda di callback (task queue) dopo che il tempo di ritardo specificato è trascorso.

JavaScript è single-threaded. Il thread principale di esecuzione (main thread) esegue il codice in modo sequenziale. Quando il thread principale termina le attività correnti, controlla la coda di callback. Se ci sono funzioni in coda (ad esempio, quelle differite con setTimeout) e il thread principale è libero, ne estrae e esegue la prima.

Ciò significa che setTimeout(fn, 0) non garantisce l'esecuzione immediata di fn. Verrà eseguita il prima possibile, ma solo dopo che il codice corrente nel thread principale è stato completato.

Sintassi:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: La funzione da eseguire.
  • milliseconds: Il numero di millisecondi prima dell'esecuzione della funzione. Se omesso, il valore predefinito è 0.
  • param1, param2, ...: Argomenti opzionali che verranno passati alla funzione al momento della chiamata.

Esempio:

// Mostrerà "Ciao!" dopo 2 secondi
setTimeout(function() {
  console.log("Ciao!");
}, 2000);

// Passaggio di argomenti
function mostraMessaggio(nome) {
  console.log("Ciao, " + nome + "!");
}

setTimeout(mostraMessaggio, 1000, "Mondo"); // Mostrerà "Ciao, Mondo!" dopo 1 secondo

setTimeout restituisce un ID numerico del timer, che può essere usato per annullare l'esecuzione pianificata tramite clearTimeout.

Esempio di utilizzo di clearTimeout:

let timerId = setTimeout(function() {
  console.log("Questa riga non verrà visualizzata");
}, 3000);

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

// Annulla il timer
clearTimeout(timerId);

console.log("Timer annullato.");

Punti importanti:

  • Il ritardo non è garantito esattamente, specialmente sotto carichi elevati sul thread principale. Il tempo indicato è il ritardo minimo prima di mettere la funzione in coda.
  • In Node.js, i timer sono gestiti dal ciclo di eventi (event loop), in modo simile al browser.