Sobes.tech
Junior

Comment fonctionne la fonction setTimeout en JavaScript?

sobes.tech IA

Réponse de l'IA

setTimeout planifie l'exécution d'une fonction ou d'un fragment de code après le nombre spécifié de millisecondes.

Lorsqu'on appelle setTimeout, le navigateur (ou l'environnement d'exécution Node.js) crée un minuteur. La fonction passée à setTimeout est placée dans la file d'attente des tâches (task queue) après l'expiration du délai spécifié.

JavaScript est monothread. Le thread principal d'exécution (main thread) exécute le code de manière séquentielle. Lorsque le thread principal termine les tâches en cours, il vérifie la file d'attente des tâches. S'il y a des fonctions dans la file (par exemple, celles différées avec setTimeout) et que le thread principal est libre, il extrait la première fonction de la file et l'exécute.

Cela signifie que setTimeout(fn, 0) ne garantit pas une exécution immédiate de la fonction fn. Elle sera exécutée dès que possible, mais seulement après la fin de l'exécution en cours dans le thread principal.

Syntaxe:

setTimeout(function, milliseconds, param1, param2, ...);
  • function: La fonction à exécuter.
  • milliseconds: Le nombre de millisecondes avant l'exécution de la fonction. Si omis, la valeur par défaut est 0.
  • param1, param2, ...: Arguments optionnels passés à la fonction lors de son appel.

Exemple:

// Affichera "Bonjour!" après 2 secondes
setTimeout(function() {
  console.log("Bonjour!");
}, 2000);

// Passage d'arguments
function montrerMessage(nom) {
  console.log("Bonjour, " + nom + "!");
}

setTimeout(montrerMessage, 1000, "Monde"); // Affichera "Bonjour, Monde!" après 1 seconde

setTimeout retourne un ID numérique du temporisateur, qui peut être utilisé pour annuler l'exécution planifiée avec clearTimeout.

Exemple d'utilisation de clearTimeout:

let timerId = setTimeout(function() {
  console.log("Cette ligne ne sera pas affichée");
}, 3000);

console.log("Minutage lancé...");

// Annuler le temporisateur
clearTimeout(timerId);

console.log("Minutage annulé.");

Points importants:

  • Le délai n'est pas garanti exactement, surtout sous forte charge du thread principal. Le temps indiqué est le délai minimal avant de placer la fonction dans la file d'attente.
  • En Node.js, les temporisateurs sont gérés par la boucle d'événements (event loop), similaire au navigateur.