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
Libérer: 2025-01-03 22:50:40
original
693 Les gens l'ont consulté

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal