1
00:00:00,810 --> 00:00:01,580
Nous saluons le retour.

2
00:00:01,710 --> 00:00:04,150
Dans cette vidéo, nous allons parler de fermetures.

3
00:00:04,800 --> 00:00:08,240
Fermetures sont l'un des concepts les plus difficiles à envelopper votre tête autour.

4
00:00:08,370 --> 00:00:13,570
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.

5
00:00:13,950 --> 00:00:15,720
Alors qu'allons-nous faire dans cette vidéo.

6
00:00:15,720 --> 00:00:18,950
Nous allons comprendre ce qu'est une fermeture et ce qu'elle n'est pas.

7
00:00:19,200 --> 00:00:22,460
Nous allons utiliser des fermetures pour émuler des variables privées.

8
00:00:22,680 --> 00:00:26,360
Nous allons énumérer certains cas d'utilisation des fermetures dans le monde réel.

9
00:00:27,210 --> 00:00:28,520
Donc ce qui est une fermeture.

10
00:00:28,830 --> 00:00:36,180
Une fermeture est une fonction qui utilise des variables définies dans des fonctions externes qui ont précédemment retourné.

11
00:00:36,690 --> 00:00:39,540
Donc, je sais que cette définition pourrait ne pas faire trop de sens en ce moment.

12
00:00:39,690 --> 00:00:41,580
Regardons donc un exemple tout de suite.

13
00:00:42,030 --> 00:00:47,210
Je vais appuyer sur l'option de commande Jay et ouvrir mes outils chrome dev.

14
00:00:47,370 --> 00:00:54,420
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.

15
00:00:54,630 --> 00:01:02,200
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.

16
00:01:02,220 --> 00:01:06,680
Les fermetures sont un intérieur de la fonction externe.

17
00:01:06,690 --> 00:01:19,130
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.

18
00:01:19,140 --> 00:01:20,520
Impressionnant.

19
00:01:21,570 --> 00:01:28,820
Maintenant, à l'intérieur de cette fonction interne je vais revenir les fermetures de chaîne sont avec la chaîne.

20
00:01:28,830 --> 00:01:32,180
Impressionnant.

21
00:01:32,940 --> 00:01:34,660
Appelons maintenant cette fonction extérieure.

22
00:01:35,400 --> 00:01:36,870
Et ce qui devrait nous revenir.

23
00:01:36,990 --> 00:01:40,140
Eh bien, il va revenir à la définition de la fonction interne.

24
00:01:40,410 --> 00:01:49,080
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.

25
00:01:49,110 --> 00:01:55,280
Donc quand j'appelle cette fonction externe et j'appelle la fonction interne tout de suite, elle retourne la chaîne.

26
00:01:55,320 --> 00:01:57,480
Fermetures sont géniaux.

27
00:01:57,480 --> 00:02:11,100
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.

28
00:02:11,100 --> 00:02:22,730
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.

29
00:02:23,610 --> 00:02:25,680
Prenons un autre exemple.

30
00:02:25,950 --> 00:02:33,730
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.

31
00:02:34,320 --> 00:02:43,790
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.

32
00:02:44,070 --> 00:02:51,010
Donc, cette fonction interne est une fermeture tout comme l'autre exemple que nous avons vu un couple de choses à noter ici.

33
00:02:51,060 --> 00:03:05,400
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.

34
00:03:05,970 --> 00:03:07,520
Essayons un exercice rapide.

35
00:03:07,680 --> 00:03:15,540
Voyez si vous pouvez déterminer si l'une de ces fonctions contiennent une vidéo de puzzle de fermeture pour une seconde.

36
00:03:15,750 --> 00:03:19,740
D'accord, qu'avez-vous trouvé dans cette première fonction.

37
00:03:19,740 --> 00:03:26,400
Nous pouvons voir que la fonction interne ne fait pas usage de toutes les variables à trouver dans une fonction externe qui est retournée.

38
00:03:26,550 --> 00:03:31,320
Donc, celui-ci ici ne contient pas de fermeture dans le deuxième exemple.

39
00:03:31,320 --> 00:03:41,610
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.

40
00:03:42,030 --> 00:03:47,980
Donc la première n'est pas, mais la seconde est toujours revenir à la définition d'une fermeture.

41
00:03:48,150 --> 00:03:56,650
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.

42
00:03:56,820 --> 00:03:58,520
Alors, quand utiliserez-vous une fermeture.

43
00:03:58,920 --> 00:04:04,200
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.

44
00:04:04,200 --> 00:04:11,520
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.

45
00:04:11,520 --> 00:04:13,780
Heureusement, les fermetures peuvent nous aider avec cela.

46
00:04:13,800 --> 00:04:23,960
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.

47
00:04:23,970 --> 00:04:32,290
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.

48
00:04:32,340 --> 00:04:35,460
Aucun avis ici que je ne donne pas cette fonction un nom.

49
00:04:35,460 --> 00:04:38,360
C'est parce que ces fonctions sont anonymes.

50
00:04:38,490 --> 00:04:45,100
Donc, si je veux nommer cette fonction je peux appeler cela quelque chose comme le comptage, mais je n'ai pas besoin.

51
00:04:45,210 --> 00:04:50,230
Et à l'intérieur de cette fonction interne, je vais revenir plus compte plus.

52
00:04:50,250 --> 00:04:58,280
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.

53
00:04:58,290 --> 00:05:07,010
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.

54
00:05:07,020 --> 00:05:10,130
Maintenant, que pensez-vous que C va être quand je le jette un coup d'oeil.

55
00:05:10,800 --> 00:05:12,230
Eh bien comme nous l'avons vu auparavant.

56
00:05:12,300 --> 00:05:20,600
Ce sera une définition de fonction et si j'appelle C de nouveau, je vais retourner le compte incrémenté de 1.

57
00:05:20,670 --> 00:05:23,060
Appelons-le encore et encore.

58
00:05:23,220 --> 00:05:30,920
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.

59
00:05:31,050 --> 00:05:35,230
Si j'essaie d'accéder à compter je vais obtenir une référence disent compter n'est pas définie.

60
00:05:35,370 --> 00:05:43,360
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.

61
00:05:43,440 --> 00:05:46,810
Pause la vidéo et essayez de copier cet exemple dans la console chrome.

62
00:05:46,910 --> 00:05:50,210
Cela aidera beaucoup à comprendre comment fonctionnent les fermetures.

63
00:05:50,880 --> 00:05:56,780
Jetons un coup d'oeil à un autre exemple de variables privées à l'intérieur de cette fonction de salle de classe.

64
00:05:56,790 --> 00:06:01,770
J'ai une variable appelée instructeurs qui est un tableau de deux chaînes appelées LP.

65
00:06:01,830 --> 00:06:06,240
Cette fonction de classe retourne un objet avec deux fonctions.

66
00:06:06,450 --> 00:06:18,500
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.

67
00:06:18,570 --> 00:06:20,960
Alors, où y at-il une fermeture qui se passe ici.

68
00:06:21,180 --> 00:06:24,640
Eh bien remarque que les instructeurs GET une fonction add instructeur.

69
00:06:24,720 --> 00:06:33,060
Les deux utilisent la variable de cet instructeur qui est en dehors de cette fonction ici et cette fonction ici.

70
00:06:33,060 --> 00:06:42,750
Donc, ces deux fonctions obtenir des instructeurs et ajouter instructeur utilisent des variables définies dans les fonctions externes qui ont déjà retourné.

71
00:06:42,750 --> 00:06:52,250
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.

72
00:06:52,620 --> 00:06:59,920
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.

73
00:07:00,000 --> 00:07:06,810
Enfin, en utilisant la fermeture, nous avons fait des instructeurs variable ici une variable privée.

74
00:07:06,810 --> 00:07:14,530
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.

75
00:07:14,760 --> 00:07:24,440
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.

76
00:07:24,540 --> 00:07:29,050
Donc, quand vous regardez un peu de ce code essayez de votre mieux pour voir si vous pouvez repérer où ces fermetures sont.

77
00:07:29,250 --> 00:07:31,680
Eh bien, assurez-vous de vous signaler aussi.

78
00:07:31,680 --> 00:07:32,830
Alors qu'est-ce que nous apprenons.

79
00:07:32,850 --> 00:07:41,480
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.

80
00:07:41,490 --> 00:07:56,770
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.

81
00:07:57,690 --> 00:07:58,830
Et c'est pour les fermetures.
