Nous saluons le retour.
Dans cette vidéo, nous allons parler de fermetures.
Fermetures sont l'un des concepts les plus difficiles à envelopper votre tête autour.
Mais une fois que vous comprenez vraiment ce que la définition est et j'ai vu un couple d'eux, il va être beaucoup plus facile.
Alors qu'allons-nous faire dans cette vidéo.
Nous allons comprendre ce qu'est une fermeture et ce qu'elle n'est pas.
Nous allons utiliser des fermetures pour émuler des variables privées.
Nous allons énumérer certains cas d'utilisation des fermetures dans le monde réel.
Donc ce qui est une fermeture.
Une fermeture est une fonction qui utilise des variables définies dans des fonctions externes qui ont précédemment retourné.
Donc, je sais que cette définition pourrait ne pas faire trop de sens en ce moment.
Regardons donc un exemple tout de suite.
Je vais appuyer sur l'option de commande Jay et ouvrir mes outils chrome dev.
Maintenant, si nous disons qu'une fermeture est une fonction qui fait usage de variables définies dans nos fonctions bien, alors nous allons faire une fonction externe.
Donc je vais faire une fonction appelée externe à l'intérieur de cette fonction amik une variable appelée données qui est égale à la chaîne.
Les fermetures sont un intérieur de la fonction externe.
Je vais retourner une nouvelle fonction appelée Inner et à l'intérieur de cette fonction interne ou faire une variable appelée données internes et les données internes est égal à la chaîne.
Impressionnant.
Maintenant, à l'intérieur de cette fonction interne je vais revenir les fermetures de chaîne sont avec la chaîne.
Impressionnant.
Appelons maintenant cette fonction extérieure.
Et ce qui devrait nous revenir.
Eh bien, il va revenir à la définition de la fonction interne.
Mais remarquez ici que l'intérieur de cette fonction interne je fais usage d'une variable appelée données qui a été définie dans la fonction externe.
Donc quand j'appelle cette fonction externe et j'appelle la fonction interne tout de suite, elle retourne la chaîne.
Fermetures sont géniaux.
Donc, vous ne pouvez pas vraiment voir la puissance des fermetures en ce moment mais ce n'est qu'un bon exemple d'utiliser des variables définies dans des fonctions externes comme cette variable de données ici à l'intérieur d'une fonction interne.
Lorsque la fonction externe a déjà renvoyé l'avis ici, la fonction externe est retournée mais je peux toujours utiliser cette variable de données même si la fonction externe est déjà retournée.
Prenons un autre exemple.
Ici, j'ai une fonction appelée Outer qui prend un paramètre A et renvoie une fonction appelée Inner qui prend un paramètre b.
La fonction interne fait appel à la variable A qui a été définie dans la fonction extérieure et par le temps qu'elle est appelée que la fonction extérieure est retournée.
Donc, cette fonction interne est une fermeture tout comme l'autre exemple que nous avons vu un couple de choses à noter ici.
Nous devons retourner la fonction interne pour que cela fonctionne et nous avons aussi la possibilité d'appeler la fonction externe et ensuite appeler immédiatement la fonction interne ou stocker le résultat de la fonction interne dans une variable et l'appeler plus tard que nous faisons couramment.
Essayons un exercice rapide.
Voyez si vous pouvez déterminer si l'une de ces fonctions contiennent une vidéo de puzzle de fermeture pour une seconde.
D'accord, qu'avez-vous trouvé dans cette première fonction.
Nous pouvons voir que la fonction interne ne fait pas usage de toutes les variables à trouver dans une fonction externe qui est retournée.
Donc, celui-ci ici ne contient pas de fermeture dans le deuxième exemple.
Nous pouvons voir que la fonction interne utilise une variable appelée données qui a été définie dans une fonction externe qui est retournée au moment où la fonction interne sera appelée.
Donc la première n'est pas, mais la seconde est toujours revenir à la définition d'une fermeture.
Et si vous voyez que la fonction interne ne fait pas usage de variables dans une fonction externe, ce n'est probablement pas une fermeture.
Alors, quand utiliserez-vous une fermeture.
Eh bien un cas d'utilisation grande pour les fermetures est de créer l'idée d'une variable privée dans d'autres langues.
Il existe un support pour les variables qui ne peuvent pas être modifiées à l'externe que nous appelons des variables privées mais dans javascript, nous n'avons pas construit dans.
Heureusement, les fermetures peuvent nous aider avec cela.
Jetons donc un coup d'oeil à cet exemple dans les outils chrome dev dans une option de commande de presse Jagan et ouvrir cela et je vais écrire une fonction appelée compteur et à l'intérieur de cette fonction de compteur.
Je vais faire une variable appelée compter de sorte que égal à zéro et à l'intérieur de cette fonction de compteur, je vais retourner une nouvelle fonction.
Aucun avis ici que je ne donne pas cette fonction un nom.
C'est parce que ces fonctions sont anonymes.
Donc, si je veux nommer cette fonction je peux appeler cela quelque chose comme le comptage, mais je n'ai pas besoin.
Et à l'intérieur de cette fonction interne, je vais revenir plus compte plus.
Et la raison que je fais plus plus ici en tant qu'opérateur préfixe est de sorte que la première fois que je l'appelle il va jusqu'à 1.
Maintenant, je peux définir cette fonction de compteur pour être égale à une variable appelée C et je vais économiser R C est égal au compteur.
Maintenant, que pensez-vous que C va être quand je le jette un coup d'oeil.
Eh bien comme nous l'avons vu auparavant.
Ce sera une définition de fonction et si j'appelle C de nouveau, je vais retourner le compte incrémenté de 1.
Appelons-le encore et encore.
Mais ce qui est vraiment gentil à ce sujet est que personne n'a accès au compte variable dans la portée que je suis en ce moment.
Si j'essaie d'accéder à compter je vais obtenir une référence disent compter n'est pas définie.
Et puisque count est une variable privée, personne ne peut entrer et changer avec la valeur du comptage commence à ce qu'il va toujours être nul.
Pause la vidéo et essayez de copier cet exemple dans la console chrome.
Cela aidera beaucoup à comprendre comment fonctionnent les fermetures.
Jetons un coup d'oeil à un autre exemple de variables privées à l'intérieur de cette fonction de salle de classe.
J'ai une variable appelée instructeurs qui est un tableau de deux chaînes appelées LP.
Cette fonction de classe retourne un objet avec deux fonctions.
Obtenir des instructeurs et un instructeur obtenir des instructeurs me permet d'afficher simplement dérangé à l'instructeur est une fonction qui prend un paramètre et l'ajoute au tableau de l'instructeur.
Alors, où y at-il une fermeture qui se passe ici.
Eh bien remarque que les instructeurs GET une fonction add instructeur.
Les deux utilisent la variable de cet instructeur qui est en dehors de cette fonction ici et cette fonction ici.
Donc, ces deux fonctions obtenir des instructeurs et ajouter instructeur utilisent des variables définies dans les fonctions externes qui ont déjà retourné.
Vous pouvez voir ici, ils obtiennent des instructeurs me permet d'imprimer le tableau de Ellen colt et l'instructeur me permet d'ajouter un instructeur à ce tableau et retourne la théorie.
Mais quand je crée une nouvelle salle de classe avec une autre variable et je reçois les instructeurs, nous pouvons voir que Ian n'est pas ici.
Enfin, en utilisant la fermeture, nous avons fait des instructeurs variable ici une variable privée.
Personne ne peut le modifier, donc chaque fois qu'une classe est créée, les instructeurs que vous obtenez sont toujours appelés une ruelle.
Donc, on dirait que vous êtes coincé avec nous pendant un petit moment alors même si nous avons un petit exemple ici beaucoup d'outils et de technologies que vous allez apprendre à faire usage de fermetures un peu.
Donc, quand vous regardez un peu de ce code essayez de votre mieux pour voir si vous pouvez repérer où ces fermetures sont.
Eh bien, assurez-vous de vous signaler aussi.
Alors qu'est-ce que nous apprenons.
Une fermeture existe quand une fonction interne fait appel à des variables déclarées dans la fonction externe qui est déjà retournée et la fermeture n'existe pas.
Si vous ne retournez pas une fonction interne et si cette fonction interne ne fait pas usage de variables renvoyées par une fonction externe, nous avons également vu que nous pouvons utiliser des fermetures pour créer des variables privées et écrire un meilleur code pour isoler notre logique et notre application.
Et c'est pour les fermetures.