Maison  >  Article  >  interface Web  >  Comment transmettre la valeur de variable correcte à une fonction lors de l'utilisation d'écouteurs d'événements dans des boucles ?

Comment transmettre la valeur de variable correcte à une fonction lors de l'utilisation d'écouteurs d'événements dans des boucles ?

DDD
DDDoriginal
2024-10-25 08:23:29905parcourir

How to Pass the Correct Variable Value to a Function When Using Event Listeners in Loops?

Comment transmettre la valeur d'une variable JS à une fonction

Lors de l'itération dans les tableaux et de l'ajout d'écouteurs d'événements à chaque élément, la valeur de la boucle La variable compteur peut ne pas être conservée comme prévu. Au lieu de capturer la valeur actuelle, l'écouteur utilise la valeur finale une fois la boucle terminée. Pour résoudre ce problème et transmettre la valeur réelle (et non la référence) à la fonction, envisagez les approches suivantes :

Navigateurs modernes :

Utilisez les mots-clés let ou const pour déclarer des variables de portée bloc :

<code class="javascript">for (let i = 0; i < results.length; i++) {
  let marker = results[i];
  google.maps.event.addListener(marker, 'click', () => change_selection(i));
}</code>

Anciens navigateurs :

Créez une portée distincte pour préserver la valeur de la variable en la passant en tant que paramètre à une fonction imbriquée :

<code class="javascript">for (var i = 0; i < results.length; i++) {
  (function (i) {
    marker = results[i];
    google.maps.event.addListener(marker, 'click', function() {
      change_selection(i);
    });
  })(i);
}</code>

En utilisant une fonction anonyme et en passant la variable comme argument, vous transmettez effectivement sa valeur à la fonction et créez une fermeture. Cela garantit que chaque auditeur a accès à la valeur correcte au moment de la création.

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