Maison >interface Web >js tutoriel >Quelle est la différence entre les fermetures JavaScript et les fonctions anonymes ?
Fermetures JavaScript et fonctions anonymes
Les fermetures sont un concept crucial en JavaScript, permettant aux fonctions d'accéder aux variables à partir de leur portée englobante, même après la la fonction est invoquée. Cependant, il est important de faire la différence entre les fermetures et les fonctions anonymes.
Prenons un exemple courant : utiliser une boucle et setTimeout pour retarder la journalisation d'une variable de compteur. Sans utiliser de fermetures, le code imprimerait la valeur finale plusieurs fois.
Utilisation incorrecte de la fermeture :
for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); // This incorrectly prints 10 for each iteration }, 1000); }
Le problème ici est que la fonction anonyme ne fonctionne pas capturer la valeur de i pour chaque itération. Au lieu de cela, il capture la référence à i dans la portée globale, qui atteint finalement la valeur finale de 10.
Utilisation correcte de la fermeture :
for (var i = 0; i < 10; i++) { (function() { var i2 = i; setTimeout(function() { console.log(i2); // This correctly prints 0 to 9 with delay }, 1000); })(); }
Dans ce cas , la fonction anonyme crée une nouvelle variable i2, qui est initialisée avec la valeur actuelle de i. La fonction anonyme interne capture ensuite la valeur de i2 et l'utilise pour la journalisation, préservant ainsi la valeur de l'itération d'origine.
Distinction entre les fermetures et les fonctions anonymes :
Alors que toutes les fonctions en JavaScript « ferment » techniquement leurs variables, le terme « fermeture » est généralement réservé aux fonctions qui :
Dans le premier exemple, la fonction anonyme ne ne répond pas à ces critères car il ne capture pas la variable i. Dans le deuxième exemple, la fonction anonyme satisfait à ces conditions et est donc considérée comme une fermeture.
Conclusion :
Comprendre la distinction entre les fermetures et les fonctions anonymes est crucial pour en utilisant efficacement la puissance de JavaScript. Les fermetures permettent aux fonctions d'interagir avec leur portée englobante, fournissant une encapsulation et permettant un accès retardé aux variables, ce qui est particulièrement bénéfique pour les opérations asynchrones et la gestion des événements.
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!