Maison >interface Web >js tutoriel >Comment accéder correctement aux variables externes dans les boucles à l'aide des fermetures JavaScript et jQuery ?

Comment accéder correctement aux variables externes dans les boucles à l'aide des fermetures JavaScript et jQuery ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-20 08:57:02800parcourir

How to Access External Variables Correctly in Loops Using JavaScript Closures and jQuery?

Accès aux variables externes dans les boucles via des fermetures JavaScript

En JavaScript, la manipulation des variables dans les fermetures et les boucles peut présenter des défis. Cet article traite d'un problème courant où l'accès aux variables dans une boucle entraîne des valeurs inattendues en raison de la portée de la variable.

Considérez l'extrait de code suivant :

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    // ...
    $("#showcasebutton_" + item.id).click(function() {
        alert(item.id);
        self.switchto(item.id);
    });
}</code>

Lorsque vous cliquez sur l'un des boutons créés par la boucle, la fonction d'alerte affiche toujours l'ID du dernier élément du tableau. Cela se produit parce que l'élément variable change à chaque itération et qu'au moment où l'événement de clic est déclenché, il fait référence au dernier élément.

Pour résoudre ce problème, nous pouvons utiliser des fermetures. Les fermetures sont des fonctions qui renvoient d'autres fonctions et sont souvent utilisées pour créer des étendues localisées pour les variables. En modifiant le code, nous pouvons encapsuler l'élément variable dans une fermeture :

<code class="javascript">for (var i in this.items) {
    var item = this.items[i];
    // ...
    $("#showcasebutton_" + item.id).click(
        (function(item) {
             return function() {
                alert(item.id);
                self.switchto(item.id);
             };
        })(item)
    );
}</code>

Dans la fonction interne, l'élément variable est capturé en tant que paramètre, créant ainsi une portée localisée. Cela garantit que lorsque l'événement de clic est déclenché, il accédera à l'objet d'élément correct associé à ce bouton.

Alternativement, vous pouvez tirer parti de la fonction d'assistance $.each() de jQuery, qui simplifie le processus d'itération et de portée variable. :

<code class="javascript">$.each(this.items,function(i, item) {
    // ...
    $("#showcasebutton_" + item.id).click(function() {
        alert(item.id);
        self.switchto(item.id);
    });
});</code>

Dans ce cas, l'élément est passé en paramètre à la fonction, garantissant la portée appropriée et résolvant le problème initial.

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