setTimeout(() => console.log("E"), 0); Promise.resolve().then(() => { console.log("R"); setTimeout(() => console.log("U"), 0); }); queueMicrotask(() => { console.log("E"); Promise.resolve().then(() => console.log("U")); }); console.log("E");
L'Énigme du Code Fantôme
Imaginée par Alou · 3 résolution(s)
Explication de la solution
L'exécution suit les règles d'évaluation de l'Event Loop JavaScript : Code synchrone : console.log("E") à la fin s'exécute immédiatement. → E File des Microtâches : Le Promise.resolve().then() affiche R et programme un setTimeout ("U") dans la file des macrotâches. Le queueMicrotask() affiche E et ajoute une nouvelle microtâche (Promise.resolve()) à la suite. Cette nouvelle microtâche s'exécute avant les macrotâches et affiche U. → R-E-U File des Macrotâches : Le tout premier setTimeout s'exécute et affiche E. Le second setTimeout (créé dans la promesse) s'exécute et affiche R. (Attends, vérifions l'ordre précis ci-dessous !) Détail de l'ordre d'affichage : Synchrone : E Microtâches : R, E, puis la microtâche imbriquée U Macrotâches : premier setTimeout E, second setTimeout R Les lettres affichées dans l'ordre donnent : E - R - E - U - E - R... (qui forme le mot ERREUR).
Classement du défi
- #1Alou50 pts · 1 tentative(s)
- #2Steve Aster Afovo48 pts · 2 tentative(s)
- #3Isko44 pts · 4 tentative(s)