Maison >interface Web >js tutoriel >Pourquoi « setTimeout » dans une boucle « for » imprime-t-il la dernière valeur deux fois et comment puis-je y remédier ?

Pourquoi « setTimeout » dans une boucle « for » imprime-t-il la dernière valeur deux fois et comment puis-je y remédier ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 22:50:40707parcourir

Why Does `setTimeout` in a `for`-Loop Print the Last Value Twice, and How Can I Fix It?

Sortie de valeur consécutive avec setTimeout dans for-Loop

Vous rencontrez un problème lorsque vous tentez d'imprimer des valeurs consécutives à l'aide de setTimeout dans une boucle for, mais cela entraîne l'impression de la dernière valeur deux fois. Cela se produit car lorsque vous utilisez la variable i directement dans la fonction setTimeout, sa valeur est mise à jour au moment de l'exécution de la fonction. Pour résoudre ce problème, il est essentiel de créer une copie distincte de i pour chaque itération.

La solution fournie y parvient en déclarant une fonction d'assistance appelée doSetTimeout. Dans cette fonction, une nouvelle variable est déclarée pour contenir la valeur actuelle de i, qui est ensuite passée en argument lors de la création du délai d'attente. Cela garantit que chaque fonction de délai d'attente possède sa propre copie distincte de i, éliminant ainsi tout problème de mise à jour des valeurs lors de l'exécution.

function doSetTimeout(i) {
  setTimeout(function() {
    alert(i);
  }, 100);
}

for (var i = 1; i <= 2; ++i)
  doSetTimeout(i);

Avec cette solution, vous pouvez imprimer avec succès les valeurs consécutives 1 et 2 comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn