Maison > interface Web > js tutoriel > Comment les fermetures peuvent-elles résoudre le problème du partage d'état dans les boucles ?

Comment les fermetures peuvent-elles résoudre le problème du partage d'état dans les boucles ?

Patricia Arquette
Libérer: 2024-10-27 00:30:30
original
427 Les gens l'ont consulté

How Can Closures Solve the State Sharing Problem in Loops?

Utiliser efficacement les fermetures dans les boucles : comprendre le concept

Les boucles basées sur la fermeture peuvent être difficiles à comprendre, mais elles offrent une technique puissante pour maintenir un état unique lors de l'itération. Pour simplifier le concept, revisitons l'exemple de code :

<code class="javascript">function addLinks() {
    for (var i = 0, link; i < 5; i++) {
        link = document.createElement("a");
        link.innerHTML = "Link " + i;
        link.onclick = function(num) {
            return function() {
                alert(num);
            };
        }(i);
        document.body.appendChild(link);
    }
}
window.onload = addLinks;</code>
Copier après la connexion

Ici, la variable i est capturée par la fonction interne créée dans la boucle. Cette fonction est ensuite affectée en tant que gestionnaire d'événements à chaque lien créé. Les doubles parenthèses, (i), contiennent un appel de fonction qui appelle immédiatement la fonction interne.

La raison de cette construction est de créer une fermeture distincte pour chaque valeur de i. Si nous attribuions simplement la fonction interne directement (sans les doubles parenthèses), toutes les fermetures partageraient la même référence à la variable i.

Approche de la fabrique de fonctions

Une plus L’approche courante pour utiliser les fermetures dans les boucles consiste à utiliser une fabrique de fonctions. Cette technique crée une référence de fonction pour chaque itération, capturant une valeur unique de i :

<code class="javascript">function generateMyHandler(x) {
    return function() {
        alert(x);
    }
}

for (var i = 0; i < 10; i++) {
    document.getElementById(i).onclick = generateMyHandler(i);
}</code>
Copier après la connexion

Cette approche garantit que chaque gestionnaire d'événements possède sa propre instance de la variable x, empêchant ainsi le partage de variables et un comportement incohérent.

Conclusion

Comprendre les fermetures dans les boucles est essentiel pour tirer parti de leur puissance dans la programmation JavaScript. En créant des fermetures uniques ou en utilisant une fabrique de fonctions, les développeurs peuvent maintenir un état distinctif dans les boucles, permettant ainsi des structures de code complexes et efficaces.

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.cn
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