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

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

Linda Hamilton
Libérer: 2024-10-20 08:57:02
original
732 Les gens l'ont consulté

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

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

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

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!

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!