Ben tornato.
In questo video parleremo delle chiusure.
Le chiusure sono uno dei concetti più difficili da avvolgere.
Ma una volta capito veramente qual è la definizione e ho visto un paio di
questi sarà molto più facile.
Quindi cosa faremo in questo video.
Capiremo cos'è una chiusura e cosa non è.
Useremo chiusure per emulare variabili private.
Stiamo per elencare alcuni casi d'uso per chiusure nel mondo reale.
Quindi cos'è una chiusura.
Una chiusura è una funzione che fa uso di variabili definite in funzioni esterne che sono state
precedentemente restituite.
Quindi so che questa definizione potrebbe non avere molto senso in questo momento.
Quindi vediamo un esempio subito.
Ho intenzione di premere l'opzione di comando Jay e aprire i miei strumenti di chrome dev.
chiusura è una funzione che fa uso di variabili definite nelle nostre funzioni, allora facciamo una funzione esterna.
Ora, se diciamo che una
Quindi creerò una funzione chiamata outer all'interno di questa funzione amik una variabile chiamata data che è uguale
alla stringa.
Le chiusure sono una parte interna della funzione esterna.
Tornerò a una nuova funzione chiamata Inner e all'interno di questa funzione interna o renderò una variabile chiamata
inner data e inner data uguale alla stringa.
Eccezionale.
Ora all'interno di questa funzione interna restituirò le chiusure delle stringhe con la stringa.
Eccezionale.
Ora chiamiamo questa funzione esterna.
E cosa dovrebbe tornare da noi.
Bene, restituirà la definizione della funzione interiore.
Ma notate qui che all'interno di questa funzione interiore sto facendo uso di una variabile chiamata dati che
è stata definita nella funzione esterna.
Quindi quando chiamo questa funzione esterna e chiamo subito la funzione interna, restituisce la stringa.
Le chiusure sono fantastiche.
Quindi in questo momento potresti non vedere il potere delle chiusure, ma questo è solo un buon esempio
dell'utilizzo di variabili definite in funzioni esterne come questa variabile di dati proprio qui all'interno di una funzione interna.
Quando la funzione esterna ha già restituito l'avviso, qui viene restituita la funzione esterna, ma sono
ancora in grado di utilizzare questa variabile di dati anche se la funzione esterna è già stata restituita.
Diamo un'occhiata a un altro esempio.
Qui ho una funzione chiamata Outer che accetta un parametro A e restituisce una
funzione chiamata Inner che contiene un parametro b.
A che è stata definita nella funzione esterna e dal momento in cui è chiamata quella funzione esterna è ritornata.
La funzione interna sta facendo uso della variabile
Quindi questa funzione interiore è una chiusura, proprio come l'altro esempio che abbiamo visto un paio di cose da notare
qui.
Dobbiamo restituire la funzione interna affinché funzioni e abbiamo anche la possibilità di chiamare la
funzione esterna e quindi chiamare immediatamente la funzione interna o memorizzare il risultato della funzione interna
in una variabile e richiamarla in seguito, cosa che comunemente facciamo.
Proviamo un rapido esercizio.
Vedi se riesci a capire se una di queste funzioni contiene un video di puzzle di chiusura per un secondo.
Bene, cosa ti è venuto in mente in questa prima funzione.
Possiamo vedere che la funzione interna non sta facendo uso di alcuna variabile da trovare in una funzione esterna
che è ritornata.
Quindi questo qui non contiene una chiusura nel secondo esempio.
Possiamo vedere che la funzione interna sta facendo uso di una variabile chiamata data che è stata definita
in una funzione esterna che è ritornata dal momento in cui la funzione interna sarà chiamata.
Quindi il primo non è, ma il secondo è sempre tornare alla definizione di chiusura.
non sta facendo uso di variabili in una funzione esterna, probabilmente non è una chiusura.
E se vedi che la funzione interiore
Quindi quando useresti una chiusura.
Beh, un ottimo caso d'uso per chiusure è quello di creare l'idea di una variabile privata in altre lingue.
Esiste il supporto per variabili che non possono essere modificate esternamente e che chiamiamo
variabili private, ma in javascript non abbiamo questo incorporato.
Per fortuna le chiusure possono aiutarci.
Diamo un'occhiata a questo esempio negli strumenti di chrome dev in un'opzione del comando di
stampa Jagan e apriamolo e scriverò una funzione chiamata contatore e all'interno di questa funzione contatore.
Ho intenzione di creare una variabile chiamata count in modo che uguale a zero e all'interno di questa
funzione contatore restituirò una nuova funzione.
Nessun avviso proprio qui che non sto dando un nome a questa funzione.
Questo perché queste funzioni sono anonime.
Quindi, se voglio nominare questa funzione, posso chiamare qualcosa come il conteggio, ma non ne ho bisogno.
E all'interno di questa funzione interiore restituirò plus plus count.
E il motivo per cui sto facendo plus plus qui come operatore prefisso è che la
prima volta che lo chiamo sale fino a 1.
Ora posso impostare questa funzione contatore come uguale a una variabile chiamata C e
salverò R C uguale al contatore.
Ora, cosa pensi che C sarà quando lo guarderò.
Beh, proprio come abbiamo visto prima.
Sarà una definizione di funzione e se richiamo di nuovo C, restituirò il conteggio incrementato
di 1.
Chiamiamolo ancora e ancora.
veramente bello in questo è che nessuno ha accesso al conteggio delle variabili nello scope in cui mi trovo adesso.
Ma ciò che è
Se provo ad accedere al conteggio ho intenzione di ottenere un riferimento dicendo che il conteggio non è definito.
E dal momento che il conteggio è una variabile privata, nessuno può entrare e cambiare con il valore
del conteggio inizia quando sarà sempre zero.
Metti in pausa il video e prova a copiare questo esempio nella console di Chrome.
Aiuterà molto a capire come funzionano le chiusure.
Diamo un'occhiata a un altro esempio di variabili private all'interno di questa funzione di classe.
Ho una variabile chiamata istruttori che è una matrice di due stringhe chiamate LP.
Questa funzione di classe restituisce un oggetto con due funzioni.
Ottenere istruttori e un istruttore ottenere istruttori mi consente di visualizzare solo disarrayed all'istruttore è una
funzione che accetta un parametro e lo aggiunge alla matrice dell'istruttore.
Quindi dove sta andando la chiusura qui.
Si noti che GET istruisce una funzione addizionatore istruttore.
Entrambi fanno uso della variabile di questo istruttore che è al di fuori di questa funzione qui e
questa funzione qui.
istruttori e aggiungono istruttore che utilizza le variabili definite nelle funzioni esterne che sono già state restituite.
Quindi queste due funzioni ottengono
Puoi vedere qui che ottengono istruttori mi permette di stampare la serie di Ellen colt e istruttore mi permette
di aggiungere un istruttore a tale matrice e restituisce la teoria.
Ma quando creo una nuova classe con un'altra variabile e ottengo gli istruttori, possiamo vedere che
Ian non è qui.
Finalmente usando la chiusura abbiamo reso la variabile degli istruttori qui una variabile privata.
Nessuno può modificarlo in modo tale che ogni volta che viene creata un'aula, gli istruttori che riceverai
saranno sempre chiamati vicoli.
Quindi sembra che tu sia rimasto con noi per un po 'di tempo, quindi anche se abbiamo
un piccolo esempio qui molti strumenti e tecnologie che imparerai a fare uso di chiusure un po'.
Quindi, quando guardi un po 'di quel codice, fai del tuo meglio per vedere se riesci a individuare dove sono
quelle chiusure.
Assicurati di farti notare anche tu.
Quindi cosa impariamo.
Esiste una chiusura quando una funzione interna fa uso di variabili dichiarate nella funzione esterna che
è già ritornata e la chiusura non esiste.
Se non si restituisce una funzione interna e se quella funzione interna non fa uso di variabili
restituite da una funzione esterna, abbiamo anche visto che possiamo usare chiusure per creare variabili private e
scrivere codice migliore per isolare la nostra logica e la nostra applicazione.
E questo è tutto per le chiusure.
Ci vediamo nel prossimo video