Maison > interface Web > js tutoriel > Comment accéder à une variable externe dans une boucle de fermeture JavaScript ?

Comment accéder à une variable externe dans une boucle de fermeture JavaScript ?

Mary-Kate Olsen
Libérer: 2024-10-20 08:56:02
original
398 Les gens l'ont consulté

How to Access an Outside Variable within a JavaScript Closure Loop?

Accès à une variable extérieure dans une boucle à partir de la fermeture JavaScript

En JavaScript, lors d'une itération sur un tableau à l'aide d'une boucle for, il est courant de rencontrer un problème où la valeur d'une variable à l'intérieur de la boucle est toujours la même que celle de la dernière itération. Cela est dû à la portée et aux fermetures variables.

Pour résoudre ce problème, une technique appelée fermetures peut être utilisée. Une fermeture est une fonction qui renvoie une fonction, qui capture la portée variable de la fonction parent.

Considérons l'exemple suivant :

<code class="javascript">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(function() {
        alert(item.id);
        self.switchto(item.id);
    });
}</code>
Copier après la connexion

Dans ce code, l'élément variable change à chaque fois itération de la boucle. Lorsque le gestionnaire de clics est invoqué, il utilise la dernière valeur de item.

Pour résoudre ce problème, nous pouvons utiliser une fermeture pour capturer la portée de la variable de boucle :

<code class="javascript">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"
    );
}</code>
Copier après la connexion

Ici, nous enveloppons la fonction de gestionnaire de clics dans une autre fonction qui capture la portée de l'élément pendant l'itération de la boucle. Lorsque le gestionnaire de clics est invoqué, il utilise la valeur correcte de l'élément.

Une approche alternative consiste à utiliser la fonction $.each() de jQuery, qui récupère automatiquement la variable de boucle, éliminant ainsi le besoin d'une fermeture :

<code class="javascript">$.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);
    });
});</code>
Copier après la connexion

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