Welkom terug.
In deze video gaan we praten over sluitingen.
Sluitingen zijn een van de meer uitdagende concepten om je hoofd wikkelen rond.
Maar als je eenmaal echt begrijpen wat de definitie is en ik heb gezien een paar van hen dat het gaat om een ​​stuk makkelijker zijn.
Dus wat moeten we gaan doen in deze video.
We gaan om te begrijpen wat een sluiting is en wat het niet is.
We gaan sluitingen te gebruiken om private variabelen na te bootsen.
We gaan naar de lijst een aantal use cases voor sluitingen in de echte wereld.
Dus wat is een sluiting.
Een sluiting is een functie die gebruik variabelen gedefinieerd buitenste functies die eerder zijn teruggekeerd maakt.
Dus ik weet dat de definitie wellicht niet al te veel zin op dit moment te maken.
Dus laten we eens kijken naar een voorbeeld meteen.
Ik ga op opdrachtoptie Jay en open mijn chroom dev gereedschappen.
Nu, als we zeggen dat een sluiting is een functie die gebruik maakt van variabelen gedefinieerd in onze goed functioneert dan laten we een buitenste functie.
Dus ik een functie genaamd buitenste binnenkant van deze functie amik een variabele genaamd gegevens die gelijk is aan de string maken.
Sluitingen een binnenzijde van de buitenste functie.
Ik zal een nieuwe functie genaamd Binnenste en binnenkant van deze binnenste functie weer of een variabele genaamd binnenste databank binnenste data gelijk aan de string.
Geweldig.
Nu binnenkant van deze innerlijke functie ga ik de string sluitingen zijn met de string terug.
Geweldig.
Laten we nu noemen dit uiterlijke functie.
En wat zou het terug naar ons.
Nou, het gaat om de definitie van de innerlijke functie terug te keren.
Maar hier opmerken dat de binnenkant van deze binnenste functie Ik maak gebruik van een variabele genaamd data die is gedefinieerd in de buitenste functie.
Dus toen ik deze uiterlijke functie aan te roepen en ik roep de binnenste functie meteen geeft hij de string.
Sluitingen zijn geweldig.
Dus je kan niet echt zien de kracht van sluitingen op dit moment, maar dit is gewoon een goed voorbeeld van het gebruik van variabelen gedefinieerd in de buitenste functies zoals deze data variabele hier binnen van een innerlijke functie.
Wanneer de buitenste functie reeds kennisgeving is teruggekeerd hier de buitenste functie wordt geretourneerd, maar ik ben nog steeds in staat zijn om deze variabele gegevens, zelfs al is de buitenste functie reeds is teruggekeerd gebruiken.
Laten we eens kijken naar een ander voorbeeld.
Hier Ik Ik heb een functie genaamd Outer dat neemt in een parameter A en geeft hij een functie genaamd Inner die neemt in een parameter b.
De binnenste functie maakt gebruik van de variabele A die is gedefinieerd in de buitenste functie en tegen de tijd dat het zo genoemd buitenste functie teruggekeerd.
Dus deze functie binnen is een sluiting net als de andere voorbeeld dat we zagen een paar dingen op te merken.
We moeten de inwendige functie dit te laten werken en we hebben ook de mogelijkheid om de buitenste functie aan te roepen en dan direct bellen met de binnenste functie of bewaar het resultaat van de inwendige functie in een variabele en bellen later die we gewoonlijk doen terugkeren.
Laten we proberen een snelle oefening.
Kijk of je kunt erachter te komen of een van deze functies een sluiting puzzel video voor een tweede bevatten.
Oké wat heb je komen met deze eerste functie.
We zien dat de binnenste functie niet door enige variabelen te vinden in een buitenste functie die is teruggekeerd.
Zodat deze hier niet een afsluiting in het tweede voorbeeld bevat.
We zien dat de binnenste functie maakt gebruik van een variabele genaamd data die is gedefinieerd in een buitenste functie die teruggekeerd is op het moment de binnenste functie wordt genoemd.
Dus de eerste is niet, maar de tweede is altijd terug te gaan naar de definitie van een sluiting.
En als je ziet dat de binnenste functie niet gebruik te maken van variabelen in een buitenste functie is het waarschijnlijk niet een sluiting.
Dus als je zou een sluiting te gebruiken.
Wel een grote use case voor sluiting is om het idee van een privé variabele in andere talen te creëren.
Er bestaat steun voor variabelen die niet van buitenaf kan worden gewijzigd, die noemen we private variabelen, maar in javascript hoeven we niet dat ingebouwd.
Gelukkig sluitingen kan ons helpen met dat.
Dus laten we eens kijken naar dit voorbeeld in de chromen dev gereedschappen in een persbericht opdrachtoptie Jagan en open die op en ik ga naar een functie genaamd teller te schrijven en de binnenkant van deze teller functie.
Ik ga een variabele genaamd tellen te maken, zodat die gelijk is aan nul en de binnenkant van deze teller functie ga ik een nieuwe functie terug te keren.
Geen bericht hier dat ik niet geven van deze functie een naam.
Dat komt omdat deze functies anoniem.
Dus als ik wil deze functie te benoemen Ik kan dit iets als het tellen van bellen, maar ik heb geen behoefte aan.
En de binnenkant van deze innerlijke functie ga ik om terug te keren plus plus tellen.
En de reden dat ik plus plus hier doen als voorvoegsel operator is, zodat de eerste keer dat ik noem het gaat tot 1.
Nu kan ik deze teller functie in te stellen dat gelijk is aan een variabele genaamd C te zijn en ik zal redden R C is gelijk tegen te gaan.
Nu, wat denk je C gaat worden wanneer ik een kijkje nemen op het.
Nou net zoals we eerder zagen.
Het gaat om een ​​functie definitie en als ik C roep nogmaals, ik ga de telling vermeerderd met 1 terug te keren.
Laten we opnieuw en opnieuw noemen.
Maar wat is echt leuk over dit is dat niemand de toegang tot de variabele telling in de ruimte die ik in op dit moment heeft.
Als ik probeer om tot graaf ik ga krijgen een verwijzing zeggen telling is niet gedefinieerd.
En aangezien telling is een private variabele niemand kan komen en veranderen met de waarde van de telling begint bij het altijd gaat worden nul.
Pauzeer de video en proberen om dit voorbeeld te kopiëren in de chromen console.
Het zal helpen een hoop met het begrijpen van hoe sluitingen werken.
Laten we eens kijken naar een ander voorbeeld van private variabelen binnenkant van deze klas functie.
Ik heb een variabele genaamd docenten die een array van twee strings genoemd LP.
Deze klas functie geeft een object met twee functies.
Krijg instructeurs en een instructeur instructeurs stelt me ​​in staat om gewoon weer te geven disarrayed bij instructeur is een functie die neemt in een parameter en toegevoegd aan reeks van de instructeur.
Dus waar is er sluiting hier aan de hand.
Wel merkt dat de GET docenten een add-instructeur functie.
Beide maken gebruik van variabele deze instructeur die buiten deze functie hier en deze functie hier.
Dus deze twee functies krijgen docenten en voeg instructeur gebruiken variabelen gedefinieerd in de buitenste functies die al zijn teruggekeerd.
Je kunt hier ze instructeurs krijgen zie me in staat stelt om af te drukken uit de serie van Ellen colt en instructeur stelt me ​​in staat om een ​​instructeur toe te voegen aan dat de array en retourneert theorie.
Maar als ik een nieuwe klas met een andere variabele te maken en ik krijg de instructeurs kunnen we zien dat Ian is niet hier.
Tot slot door het gebruik van de sluiting hebben we de instructeurs variabele maakte hier een eigen variabele.
Niemand kan het zo op elk moment wijzigen dat een klaslokaal wordt gecreëerd de instructeurs die u op weg zullen altijd een steegje te noemen.
Zodat het lijkt alsof je vast zit met ons voor een tijdje dus ook al hebben we een klein voorbeeld hier een hoop tools en technologieën die je zult leren over gebruik maken van sluitingen nogal een beetje.
Dus als u op zoek bent naar een aantal van die code probeer je best om te zien of u kunt ter plaatse waar die sluitingen.
Nou moet u wijzen op je net zo goed.
Dus wat doen we leren.
Een afsluiting ontstaat wanneer een binnenste functie maakt gebruik van variabelen in functie buitenste aangegeven dat reeds is teruggekeerd en de afsluiting bestaat niet.
Als u niet beschikt over een innerlijke functie terug te keren en als die innerlijke functie geen gebruik maakt van variabelen geretourneerd door een buitenste functie maakt zagen we ook dat we sluitingen kunnen gebruiken om private variabelen en schrijven betere code om onze logica en onze applicatie te isoleren.
En dat is het voor sluitingen.