Maison > interface Web > js tutoriel > le corps du texte

Lors d'une boucle dans des fermetures JavaScript, comment conserver l'accès aux valeurs de variables uniques ?

Susan Sarandon
Libérer: 2024-10-20 08:53:30
original
843 Les gens l'ont consulté

When Looping in JavaScript Closures, How to Maintain Access to Unique Variable Values?

Accès à une variable extérieure dans une boucle à partir d'une fermeture Javascript

En JavaScript, lors de l'utilisation d'une fermeture, la variable dans la boucle est référencée par un pointeur . Cela signifie que lorsque la boucle est terminée, la dernière valeur de la variable est utilisée, ce qui entraîne des divergences de fonctionnalité.

Pour résoudre ce problème, une technique appelée fermeture peut être utilisée. Une fermeture est essentiellement une fonction qui renvoie une fonction. En définissant la variable différemment à l'aide d'une fermeture, nous pouvons garantir que chaque itération de la boucle fait référence à sa propre valeur distincte de la variable.

Considérez le code suivant :

    for (var i in this.items) {
            var item = this.items[i];
            $("#showcasenav").append("<li id=\"showcasebutton_"+item.id+"\"><img src=\"/images/showcase/icon-"+item.id+".png\" /></li>");
            $("#showcasebutton_"+item.id).click( 
                // create an anonymous function that will scope "item"
                (function(item) {
                   // that returns our function 
                   return function() {
                    alert(item.id);
                    self.switchto(item.id);
                   };
                })(item) // immediately call it with "item"
            );
    }
Copier après la connexion

Dans ce code modifié, une fonction anonyme est créée à chaque itération de la boucle qui prend la valeur actuelle de l'élément comme argument. Cela garantit que chaque gestionnaire de clics possède sa propre instance distincte de la variable d'élément.

Alternativement, la fonction d'assistance $.each() de jQuery peut être utilisée pour simplifier le code et éliminer le besoin d'une fermeture :

$.each(this.items,function(i, item) {
  $("#showcasenav").append("<li id=\"showcasebutton_"+item.id+"\"><img src=\"/images/showcase/icon-"+item.id+".png\" /></li>");
  $("#showcasebutton_"+item.id).click(function() {
    alert(item.id);
    self.switchto(item.id);
  });
});
Copier après la connexion

En utilisant une fermeture ou $.each() de jQuery, nous pouvons garantir que chaque itération de la boucle a accès à sa propre valeur unique de la variable, résolvant ainsi le problème de l'accès aux variables extérieures en dehors de la boucle.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!