Adloun

JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 4 · Application directe du cours

var dans une boucle

Portée, fermetures et this · niveau 3 (difficile)

Énoncé

Un développeur veut afficher, une seconde après le lancement, les trois titres d'une liste :


var titres = ["HTML", "CSS", "JavaScript"];
for (var i = 0; i < titres.length; i++) {
  setTimeout(() => console.log(i, titres[i]), 1000);
}

Qu'affiche ce programme ? Expliquer, puis corriger en changeant un seul mot.

Corrigé


3 undefined
3 undefined
3 undefined

Il n'y a qu'une variable i, de portée module ; les trois fonctions passées à setTimeout s'exécutent une seconde plus tard, quand la boucle est terminée et que i vaut 3. Or titres[3] n'existe pas : undefined. En remplaçant var i par let i, chaque tour de boucle a sa variable, et chaque fonction se souvient de la sienne (et var titres devient const titres) :


const titres = ["HTML", "CSS", "JavaScript"];
for (let i = 0; i < titres.length; i++) {
  setTimeout(() => console.log(i, titres[i]), 1000);
}

0 HTML
1 CSS
2 JavaScript

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →