1
00:00:00,810 --> 00:00:01,580
Ben tornato.

2
00:00:01,710 --> 00:00:04,150
In questo video parleremo delle chiusure.

3
00:00:04,800 --> 00:00:08,240
Le chiusure sono uno dei concetti più difficili da avvolgere.

4
00:00:08,370 --> 00:00:12,360
Ma una volta capito veramente qual è la definizione e ho visto un paio di

5
00:00:12,360 --> 00:00:13,570
questi sarà molto più facile.

6
00:00:13,950 --> 00:00:15,720
Quindi cosa faremo in questo video.

7
00:00:15,720 --> 00:00:18,950
Capiremo cos'è una chiusura e cosa non è.

8
00:00:19,200 --> 00:00:22,460
Useremo chiusure per emulare variabili private.

9
00:00:22,680 --> 00:00:26,360
Stiamo per elencare alcuni casi d'uso per chiusure nel mondo reale.

10
00:00:27,210 --> 00:00:28,520
Quindi cos'è una chiusura.

11
00:00:28,830 --> 00:00:35,190
Una chiusura è una funzione che fa uso di variabili definite in funzioni esterne che sono state

12
00:00:35,220 --> 00:00:36,180
precedentemente restituite.

13
00:00:36,690 --> 00:00:39,540
Quindi so che questa definizione potrebbe non avere molto senso in questo momento.

14
00:00:39,690 --> 00:00:41,580
Quindi vediamo un esempio subito.

15
00:00:42,030 --> 00:00:47,210
Ho intenzione di premere l'opzione di comando Jay e aprire i miei strumenti di chrome dev.

16
00:00:47,370 --> 00:00:52,670
chiusura è una funzione che fa uso di variabili definite nelle nostre funzioni, allora facciamo una funzione esterna.

17
00:00:52,800 --> 00:00:54,420
Ora, se diciamo che una

18
00:00:54,630 --> 00:01:01,410
Quindi creerò una funzione chiamata outer all'interno di questa funzione amik una variabile chiamata data che è uguale

19
00:01:01,410 --> 00:01:02,200
alla stringa.

20
00:01:02,220 --> 00:01:06,680
Le chiusure sono una parte interna della funzione esterna.

21
00:01:06,690 --> 00:01:15,480
Tornerò a una nuova funzione chiamata Inner e all'interno di questa funzione interna o renderò una variabile chiamata

22
00:01:15,510 --> 00:01:19,130
inner data e inner data uguale alla stringa.

23
00:01:19,140 --> 00:01:20,520
Eccezionale.

24
00:01:21,570 --> 00:01:28,820
Ora all'interno di questa funzione interna restituirò le chiusure delle stringhe con la stringa.

25
00:01:28,830 --> 00:01:32,180
Eccezionale.

26
00:01:32,940 --> 00:01:34,660
Ora chiamiamo questa funzione esterna.

27
00:01:35,400 --> 00:01:36,870
E cosa dovrebbe tornare da noi.

28
00:01:36,990 --> 00:01:40,140
Bene, restituirà la definizione della funzione interiore.

29
00:01:40,410 --> 00:01:46,800
Ma notate qui che all'interno di questa funzione interiore sto facendo uso di una variabile chiamata dati che

30
00:01:46,800 --> 00:01:49,080
è stata definita nella funzione esterna.

31
00:01:49,110 --> 00:01:55,280
Quindi quando chiamo questa funzione esterna e chiamo subito la funzione interna, restituisce la stringa.

32
00:01:55,320 --> 00:01:57,480
Le chiusure sono fantastiche.

33
00:01:57,480 --> 00:02:03,930
Quindi in questo momento potresti non vedere il potere delle chiusure, ma questo è solo un buon esempio

34
00:02:04,230 --> 00:02:11,100
dell'utilizzo di variabili definite in funzioni esterne come questa variabile di dati proprio qui all'interno di una funzione interna.

35
00:02:11,100 --> 00:02:16,680
Quando la funzione esterna ha già restituito l'avviso, qui viene restituita la funzione esterna, ma sono

36
00:02:16,680 --> 00:02:22,730
ancora in grado di utilizzare questa variabile di dati anche se la funzione esterna è già stata restituita.

37
00:02:23,610 --> 00:02:25,680
Diamo un'occhiata a un altro esempio.

38
00:02:25,950 --> 00:02:31,050
Qui ho una funzione chiamata Outer che accetta un parametro A e restituisce una

39
00:02:31,080 --> 00:02:33,730
funzione chiamata Inner che contiene un parametro b.

40
00:02:34,320 --> 00:02:40,980
A che è stata definita nella funzione esterna e dal momento in cui è chiamata quella funzione esterna è ritornata.

41
00:02:40,980 --> 00:02:43,790
La funzione interna sta facendo uso della variabile

42
00:02:44,070 --> 00:02:50,610
Quindi questa funzione interiore è una chiusura, proprio come l'altro esempio che abbiamo visto un paio di cose da notare

43
00:02:50,610 --> 00:02:51,010
qui.

44
00:02:51,060 --> 00:02:56,280
Dobbiamo restituire la funzione interna affinché funzioni e abbiamo anche la possibilità di chiamare la

45
00:02:56,280 --> 00:03:01,620
funzione esterna e quindi chiamare immediatamente la funzione interna o memorizzare il risultato della funzione interna

46
00:03:01,620 --> 00:03:05,400
in una variabile e richiamarla in seguito, cosa che comunemente facciamo.

47
00:03:05,970 --> 00:03:07,520
Proviamo un rapido esercizio.

48
00:03:07,680 --> 00:03:15,540
Vedi se riesci a capire se una di queste funzioni contiene un video di puzzle di chiusura per un secondo.

49
00:03:15,750 --> 00:03:19,740
Bene, cosa ti è venuto in mente in questa prima funzione.

50
00:03:19,740 --> 00:03:25,410
Possiamo vedere che la funzione interna non sta facendo uso di alcuna variabile da trovare in una funzione esterna

51
00:03:25,410 --> 00:03:26,400
che è ritornata.

52
00:03:26,550 --> 00:03:31,320
Quindi questo qui non contiene una chiusura nel secondo esempio.

53
00:03:31,320 --> 00:03:36,900
Possiamo vedere che la funzione interna sta facendo uso di una variabile chiamata data che è stata definita

54
00:03:36,900 --> 00:03:41,610
in una funzione esterna che è ritornata dal momento in cui la funzione interna sarà chiamata.

55
00:03:42,030 --> 00:03:47,980
Quindi il primo non è, ma il secondo è sempre tornare alla definizione di chiusura.

56
00:03:48,150 --> 00:03:54,030
non sta facendo uso di variabili in una funzione esterna, probabilmente non è una chiusura.

57
00:03:54,090 --> 00:03:56,650
E se vedi che la funzione interiore

58
00:03:56,820 --> 00:03:58,520
Quindi quando useresti una chiusura.

59
00:03:58,920 --> 00:04:04,200
Beh, un ottimo caso d'uso per chiusure è quello di creare l'idea di una variabile privata in altre lingue.

60
00:04:04,200 --> 00:04:08,640
Esiste il supporto per variabili che non possono essere modificate esternamente e che chiamiamo

61
00:04:08,790 --> 00:04:11,520
variabili private, ma in javascript non abbiamo questo incorporato.

62
00:04:11,520 --> 00:04:13,780
Per fortuna le chiusure possono aiutarci.

63
00:04:13,800 --> 00:04:18,810
Diamo un'occhiata a questo esempio negli strumenti di chrome dev in un'opzione del comando di

64
00:04:18,810 --> 00:04:23,960
stampa Jagan e apriamolo e scriverò una funzione chiamata contatore e all'interno di questa funzione contatore.

65
00:04:23,970 --> 00:04:30,000
Ho intenzione di creare una variabile chiamata count in modo che uguale a zero e all'interno di questa

66
00:04:30,090 --> 00:04:32,290
funzione contatore restituirò una nuova funzione.

67
00:04:32,340 --> 00:04:35,460
Nessun avviso proprio qui che non sto dando un nome a questa funzione.

68
00:04:35,460 --> 00:04:38,360
Questo perché queste funzioni sono anonime.

69
00:04:38,490 --> 00:04:45,100
Quindi, se voglio nominare questa funzione, posso chiamare qualcosa come il conteggio, ma non ne ho bisogno.

70
00:04:45,210 --> 00:04:50,230
E all'interno di questa funzione interiore restituirò plus plus count.

71
00:04:50,250 --> 00:04:55,380
E il motivo per cui sto facendo plus plus qui come operatore prefisso è che la

72
00:04:55,380 --> 00:04:58,280
prima volta che lo chiamo sale fino a 1.

73
00:04:58,290 --> 00:05:04,500
Ora posso impostare questa funzione contatore come uguale a una variabile chiamata C e

74
00:05:04,530 --> 00:05:07,010
salverò R C uguale al contatore.

75
00:05:07,020 --> 00:05:10,130
Ora, cosa pensi che C sarà quando lo guarderò.

76
00:05:10,800 --> 00:05:12,230
Beh, proprio come abbiamo visto prima.

77
00:05:12,300 --> 00:05:19,440
Sarà una definizione di funzione e se richiamo di nuovo C, restituirò il conteggio incrementato

78
00:05:19,590 --> 00:05:20,600
di 1.

79
00:05:20,670 --> 00:05:23,060
Chiamiamolo ancora e ancora.

80
00:05:23,220 --> 00:05:29,790
veramente bello in questo è che nessuno ha accesso al conteggio delle variabili nello scope in cui mi trovo adesso.

81
00:05:29,790 --> 00:05:30,920
Ma ciò che è

82
00:05:31,050 --> 00:05:35,230
Se provo ad accedere al conteggio ho intenzione di ottenere un riferimento dicendo che il conteggio non è definito.

83
00:05:35,370 --> 00:05:41,040
E dal momento che il conteggio è una variabile privata, nessuno può entrare e cambiare con il valore

84
00:05:41,040 --> 00:05:43,360
del conteggio inizia quando sarà sempre zero.

85
00:05:43,440 --> 00:05:46,810
Metti in pausa il video e prova a copiare questo esempio nella console di Chrome.

86
00:05:46,910 --> 00:05:50,210
Aiuterà molto a capire come funzionano le chiusure.

87
00:05:50,880 --> 00:05:56,780
Diamo un'occhiata a un altro esempio di variabili private all'interno di questa funzione di classe.

88
00:05:56,790 --> 00:06:01,770
Ho una variabile chiamata istruttori che è una matrice di due stringhe chiamate LP.

89
00:06:01,830 --> 00:06:06,240
Questa funzione di classe restituisce un oggetto con due funzioni.

90
00:06:06,450 --> 00:06:13,320
Ottenere istruttori e un istruttore ottenere istruttori mi consente di visualizzare solo disarrayed all'istruttore è una

91
00:06:13,410 --> 00:06:18,500
funzione che accetta un parametro e lo aggiunge alla matrice dell'istruttore.

92
00:06:18,570 --> 00:06:20,960
Quindi dove sta andando la chiusura qui.

93
00:06:21,180 --> 00:06:24,640
Si noti che GET istruisce una funzione addizionatore istruttore.

94
00:06:24,720 --> 00:06:31,860
Entrambi fanno uso della variabile di questo istruttore che è al di fuori di questa funzione qui e

95
00:06:31,860 --> 00:06:33,060
questa funzione qui.

96
00:06:33,060 --> 00:06:40,320
istruttori e aggiungono istruttore che utilizza le variabili definite nelle funzioni esterne che sono già state restituite.

97
00:06:40,680 --> 00:06:42,750
Quindi queste due funzioni ottengono

98
00:06:42,750 --> 00:06:48,750
Puoi vedere qui che ottengono istruttori mi permette di stampare la serie di Ellen colt e istruttore mi permette

99
00:06:48,870 --> 00:06:52,250
di aggiungere un istruttore a tale matrice e restituisce la teoria.

100
00:06:52,620 --> 00:06:58,470
Ma quando creo una nuova classe con un'altra variabile e ottengo gli istruttori, possiamo vedere che

101
00:06:58,470 --> 00:06:59,920
Ian non è qui.

102
00:07:00,000 --> 00:07:06,810
Finalmente usando la chiusura abbiamo reso la variabile degli istruttori qui una variabile privata.

103
00:07:06,810 --> 00:07:12,990
Nessuno può modificarlo in modo tale che ogni volta che viene creata un'aula, gli istruttori che riceverai

104
00:07:12,990 --> 00:07:14,530
saranno sempre chiamati vicoli.

105
00:07:14,760 --> 00:07:19,380
Quindi sembra che tu sia rimasto con noi per un po 'di tempo, quindi anche se abbiamo

106
00:07:19,680 --> 00:07:24,440
un piccolo esempio qui molti strumenti e tecnologie che imparerai a fare uso di chiusure un po'.

107
00:07:24,540 --> 00:07:28,560
Quindi, quando guardi un po 'di quel codice, fai del tuo meglio per vedere se riesci a individuare dove sono

108
00:07:28,560 --> 00:07:29,050
quelle chiusure.

109
00:07:29,250 --> 00:07:31,680
Assicurati di farti notare anche tu.

110
00:07:31,680 --> 00:07:32,830
Quindi cosa impariamo.

111
00:07:32,850 --> 00:07:38,550
Esiste una chiusura quando una funzione interna fa uso di variabili dichiarate nella funzione esterna che

112
00:07:38,550 --> 00:07:41,480
è già ritornata e la chiusura non esiste.

113
00:07:41,490 --> 00:07:47,250
Se non si restituisce una funzione interna e se quella funzione interna non fa uso di variabili

114
00:07:47,310 --> 00:07:52,980
restituite da una funzione esterna, abbiamo anche visto che possiamo usare chiusure per creare variabili private e

115
00:07:52,980 --> 00:07:56,770
scrivere codice migliore per isolare la nostra logica e la nostra applicazione.

116
00:07:57,690 --> 00:07:58,830
E questo è tutto per le chiusure.

117
00:07:58,830 --> 00:07:59,710
Ci vediamo nel prossimo video
