Bases des technologies web

console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');

Lorsqu'on exécute le JavaScript ci-dessus dans un navigateur, quel est l'ordre correct d'affichage des caractères dans la console ?

  1. AA → B → C → D
  2. BA → D → B → C
  3. CA → D → C → B
Afficher la réponse et l'explication

Réponse : C. A → D → C → B

Le JavaScript d'une page s'exécute sur un seul thread principal, et aucun autre traitement ne s'intercale tant que le code en cours n'est pas terminé. Tout le code synchrone s'exécute d'abord, ce qui affiche A et D. Le traitement passé à then d'une Promise est une microtâche, exécutée juste après la fin du code en cours : C s'affiche donc ensuite. Même avec 0 ms pour setTimeout, le traitement est placé comme tâche dans la file des tâches en attente, et la boucle d'événements ne l'en retire qu'après avoir traité les microtâches : B arrive donc en dernier.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des technologies web

  1. Selon la politique de même origine des navigateurs, quelle URL est considérée comme de même origine que https://www.example.com/app/index.html ?
  2. Le JavaScript d'une page de https://app.example.com veut envoyer avec fetch une requête POST vers https://api.example.net/orders, avec un corps de type Content-Type: application/json. Quel comportement de CORS est correct dans ce cas ?
  3. Quelle description d'un Service Worker est correcte ?
  4. Dans une page en responsive design adaptée aussi aux smartphones, quel est le but principal d'écrire <meta name="viewport" content="width=device-width, initial-scale=1"> dans <head> ?
  5. On ajoute Cache-Control: private, max-age=60 à la réponse d'une page « Mon compte » dont le contenu diffère selon l'utilisateur. Quel est l'effet correct de cette directive ?