1
00:00:00,810 --> 00:00:01,580
Welkom terug.

2
00:00:01,710 --> 00:00:04,150
In deze video gaan we praten over sluitingen.

3
00:00:04,800 --> 00:00:08,240
Sluitingen zijn een van de meer uitdagende concepten om je hoofd wikkelen rond.

4
00:00:08,370 --> 00:00:13,570
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.

5
00:00:13,950 --> 00:00:15,720
Dus wat moeten we gaan doen in deze video.

6
00:00:15,720 --> 00:00:18,950
We gaan om te begrijpen wat een sluiting is en wat het niet is.

7
00:00:19,200 --> 00:00:22,460
We gaan sluitingen te gebruiken om private variabelen na te bootsen.

8
00:00:22,680 --> 00:00:26,360
We gaan naar de lijst een aantal use cases voor sluitingen in de echte wereld.

9
00:00:27,210 --> 00:00:28,520
Dus wat is een sluiting.

10
00:00:28,830 --> 00:00:36,180
Een sluiting is een functie die gebruik variabelen gedefinieerd buitenste functies die eerder zijn teruggekeerd maakt.

11
00:00:36,690 --> 00:00:39,540
Dus ik weet dat de definitie wellicht niet al te veel zin op dit moment te maken.

12
00:00:39,690 --> 00:00:41,580
Dus laten we eens kijken naar een voorbeeld meteen.

13
00:00:42,030 --> 00:00:47,210
Ik ga op opdrachtoptie Jay en open mijn chroom dev gereedschappen.

14
00:00:47,370 --> 00:00:54,420
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.

15
00:00:54,630 --> 00:01:02,200
Dus ik een functie genaamd buitenste binnenkant van deze functie amik een variabele genaamd gegevens die gelijk is aan de string maken.

16
00:01:02,220 --> 00:01:06,680
Sluitingen een binnenzijde van de buitenste functie.

17
00:01:06,690 --> 00:01:19,130
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.

18
00:01:19,140 --> 00:01:20,520
Geweldig.

19
00:01:21,570 --> 00:01:28,820
Nu binnenkant van deze innerlijke functie ga ik de string sluitingen zijn met de string terug.

20
00:01:28,830 --> 00:01:32,180
Geweldig.

21
00:01:32,940 --> 00:01:34,660
Laten we nu noemen dit uiterlijke functie.

22
00:01:35,400 --> 00:01:36,870
En wat zou het terug naar ons.

23
00:01:36,990 --> 00:01:40,140
Nou, het gaat om de definitie van de innerlijke functie terug te keren.

24
00:01:40,410 --> 00:01:49,080
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.

25
00:01:49,110 --> 00:01:55,280
Dus toen ik deze uiterlijke functie aan te roepen en ik roep de binnenste functie meteen geeft hij de string.

26
00:01:55,320 --> 00:01:57,480
Sluitingen zijn geweldig.

27
00:01:57,480 --> 00:02:11,100
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.

28
00:02:11,100 --> 00:02:22,730
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.

29
00:02:23,610 --> 00:02:25,680
Laten we eens kijken naar een ander voorbeeld.

30
00:02:25,950 --> 00:02:33,730
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.

31
00:02:34,320 --> 00:02:43,790
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.

32
00:02:44,070 --> 00:02:51,010
Dus deze functie binnen is een sluiting net als de andere voorbeeld dat we zagen een paar dingen op te merken.

33
00:02:51,060 --> 00:03:05,400
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.

34
00:03:05,970 --> 00:03:07,520
Laten we proberen een snelle oefening.

35
00:03:07,680 --> 00:03:15,540
Kijk of je kunt erachter te komen of een van deze functies een sluiting puzzel video voor een tweede bevatten.

36
00:03:15,750 --> 00:03:19,740
Oké wat heb je komen met deze eerste functie.

37
00:03:19,740 --> 00:03:26,400
We zien dat de binnenste functie niet door enige variabelen te vinden in een buitenste functie die is teruggekeerd.

38
00:03:26,550 --> 00:03:31,320
Zodat deze hier niet een afsluiting in het tweede voorbeeld bevat.

39
00:03:31,320 --> 00:03:41,610
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.

40
00:03:42,030 --> 00:03:47,980
Dus de eerste is niet, maar de tweede is altijd terug te gaan naar de definitie van een sluiting.

41
00:03:48,150 --> 00:03:56,650
En als je ziet dat de binnenste functie niet gebruik te maken van variabelen in een buitenste functie is het waarschijnlijk niet een sluiting.

42
00:03:56,820 --> 00:03:58,520
Dus als je zou een sluiting te gebruiken.

43
00:03:58,920 --> 00:04:04,200
Wel een grote use case voor sluiting is om het idee van een privé variabele in andere talen te creëren.

44
00:04:04,200 --> 00:04:11,520
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.

45
00:04:11,520 --> 00:04:13,780
Gelukkig sluitingen kan ons helpen met dat.

46
00:04:13,800 --> 00:04:23,960
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.

47
00:04:23,970 --> 00:04:32,290
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.

48
00:04:32,340 --> 00:04:35,460
Geen bericht hier dat ik niet geven van deze functie een naam.

49
00:04:35,460 --> 00:04:38,360
Dat komt omdat deze functies anoniem.

50
00:04:38,490 --> 00:04:45,100
Dus als ik wil deze functie te benoemen Ik kan dit iets als het tellen van bellen, maar ik heb geen behoefte aan.

51
00:04:45,210 --> 00:04:50,230
En de binnenkant van deze innerlijke functie ga ik om terug te keren plus plus tellen.

52
00:04:50,250 --> 00:04:58,280
En de reden dat ik plus plus hier doen als voorvoegsel operator is, zodat de eerste keer dat ik noem het gaat tot 1.

53
00:04:58,290 --> 00:05:07,010
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.

54
00:05:07,020 --> 00:05:10,130
Nu, wat denk je C gaat worden wanneer ik een kijkje nemen op het.

55
00:05:10,800 --> 00:05:12,230
Nou net zoals we eerder zagen.

56
00:05:12,300 --> 00:05:20,600
Het gaat om een ​​functie definitie en als ik C roep nogmaals, ik ga de telling vermeerderd met 1 terug te keren.

57
00:05:20,670 --> 00:05:23,060
Laten we opnieuw en opnieuw noemen.

58
00:05:23,220 --> 00:05:30,920
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.

59
00:05:31,050 --> 00:05:35,230
Als ik probeer om tot graaf ik ga krijgen een verwijzing zeggen telling is niet gedefinieerd.

60
00:05:35,370 --> 00:05:43,360
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.

61
00:05:43,440 --> 00:05:46,810
Pauzeer de video en proberen om dit voorbeeld te kopiëren in de chromen console.

62
00:05:46,910 --> 00:05:50,210
Het zal helpen een hoop met het begrijpen van hoe sluitingen werken.

63
00:05:50,880 --> 00:05:56,780
Laten we eens kijken naar een ander voorbeeld van private variabelen binnenkant van deze klas functie.

64
00:05:56,790 --> 00:06:01,770
Ik heb een variabele genaamd docenten die een array van twee strings genoemd LP.

65
00:06:01,830 --> 00:06:06,240
Deze klas functie geeft een object met twee functies.

66
00:06:06,450 --> 00:06:18,500
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.

67
00:06:18,570 --> 00:06:20,960
Dus waar is er sluiting hier aan de hand.

68
00:06:21,180 --> 00:06:24,640
Wel merkt dat de GET docenten een add-instructeur functie.

69
00:06:24,720 --> 00:06:33,060
Beide maken gebruik van variabele deze instructeur die buiten deze functie hier en deze functie hier.

70
00:06:33,060 --> 00:06:42,750
Dus deze twee functies krijgen docenten en voeg instructeur gebruiken variabelen gedefinieerd in de buitenste functies die al zijn teruggekeerd.

71
00:06:42,750 --> 00:06:52,250
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.

72
00:06:52,620 --> 00:06:59,920
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.

73
00:07:00,000 --> 00:07:06,810
Tot slot door het gebruik van de sluiting hebben we de instructeurs variabele maakte hier een eigen variabele.

74
00:07:06,810 --> 00:07:14,530
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.

75
00:07:14,760 --> 00:07:24,440
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.

76
00:07:24,540 --> 00:07:29,050
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.

77
00:07:29,250 --> 00:07:31,680
Nou moet u wijzen op je net zo goed.

78
00:07:31,680 --> 00:07:32,830
Dus wat doen we leren.

79
00:07:32,850 --> 00:07:41,480
Een afsluiting ontstaat wanneer een binnenste functie maakt gebruik van variabelen in functie buitenste aangegeven dat reeds is teruggekeerd en de afsluiting bestaat niet.

80
00:07:41,490 --> 00:07:56,770
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.

81
00:07:57,690 --> 00:07:58,830
En dat is het voor sluitingen.
