1
00:00:00,810 --> 00:00:01,580
Witamy spowrotem.

2
00:00:01,710 --> 00:00:04,150
W tym filmie mamy zamiar rozmawiać o zamknięć.

3
00:00:04,800 --> 00:00:08,240
Zamknięcia są jednym z trudniejszych pojęć owinąć wokół twojej głowie.

4
00:00:08,370 --> 00:00:13,570
Ale kiedy naprawdę zrozumieć, co definicja i widziałem kilka z nich to będzie dużo łatwiejsze.

5
00:00:13,950 --> 00:00:15,720
Więc co mamy zamiar zrobić w tym filmie.

6
00:00:15,720 --> 00:00:18,950
Jedziemy, aby zrozumieć, co jest zamknięciem, a co nie jest.

7
00:00:19,200 --> 00:00:22,460
Mamy zamiar użyć zamknięć naśladować zmiennych prywatnych.

8
00:00:22,680 --> 00:00:26,360
Jedziemy do listy kilka przypadków użycia dla zamknięć w realnym świecie.

9
00:00:27,210 --> 00:00:28,520
Więc co jest zamknięcie.

10
00:00:28,830 --> 00:00:36,180
Zamknięcie to funkcja, która sprawia, że ​​wykorzystanie zmiennych zdefiniowanych w funkcji zewnętrznych, które wcześniej zwrócone.

11
00:00:36,690 --> 00:00:39,540
Więc wiem, że definicja może nie mieć zbyt wiele sensu w tej chwili.

12
00:00:39,690 --> 00:00:41,580
Więc spójrzmy na przykład od razu.

13
00:00:42,030 --> 00:00:47,210
Idę naciśnij opcję komendy Jay i otworzyć moje narzędzia chrom Dev.

14
00:00:47,370 --> 00:00:54,420
Teraz, jeśli mówimy, że zamknięcie jest funkcja, która sprawia, że ​​wykorzystanie zmiennych zdefiniowanych w naszych funkcji no to zróbmy funkcję zewnętrzną.

15
00:00:54,630 --> 00:01:02,200
Więc zrobię funkcję o nazwie zewnętrzna wewnątrz tej funkcji Amik zmienną danych, który jest równy ciąg.

16
00:01:02,220 --> 00:01:06,680
Zamknięcia są wewnątrz funkcji zewnętrznej.

17
00:01:06,690 --> 00:01:19,130
Wrócę nową funkcję o nazwie Wewnętrzna i wewnątrz tej wewnętrznej funkcji lub dokonać zmienna nazywa wewnętrzne dane oraz dane wewnętrzna jest równa łańcucha.

18
00:01:19,140 --> 00:01:20,520
Niesamowite.

19
00:01:21,570 --> 00:01:28,820
Teraz wewnątrz tej wewnętrznej funkcji zamierzam powrócić ciąg zamknięcia są z łańcucha.

20
00:01:28,830 --> 00:01:32,180
Niesamowite.

21
00:01:32,940 --> 00:01:34,660
Teraz nazywają tę funkcję zewnętrzną.

22
00:01:35,400 --> 00:01:36,870
A co powinien wrócić do nas.

23
00:01:36,990 --> 00:01:40,140
Cóż to będzie powrót do definicji funkcji wewnętrznej.

24
00:01:40,410 --> 00:01:49,080
Ale zauważmy tutaj wewnątrz tej wewnętrznej funkcji Robię wykorzystanie zmienną danych, które zostały zdefiniowane w funkcji zewnętrznej.

25
00:01:49,110 --> 00:01:55,280
Więc kiedy nazywają tę funkcję zewnętrzną i wewnętrzną wywołać funkcję od razu zwraca łańcuch.

26
00:01:55,320 --> 00:01:57,480
Zamknięcia są niesamowite.

27
00:01:57,480 --> 00:02:11,100
Więc nie można naprawdę zobaczyć siłę zamknięć już teraz, ale to jest po prostu dobry przykład wykorzystania zmiennych zdefiniowanych w funkcji zewnętrznych jak ta zmienna danych tu wewnątrz wewnętrznej funkcji.

28
00:02:11,100 --> 00:02:22,730
Gdy funkcja zewnętrzna już wrócił zawiadomienie tu funkcja zewnętrzna jest zwracany, ale nadal jestem w stanie używać tej zmiennej danych chociaż funkcja zewnętrzna już zwrócony.

29
00:02:23,610 --> 00:02:25,680
Rzućmy okiem na innym przykładzie.

30
00:02:25,950 --> 00:02:33,730
Tutaj ja mam funkcję o nazwie Outer, które odbywają się w parametrze A i zwraca funkcję o nazwie Wewnętrzna który odbywa się w parametr B.

31
00:02:34,320 --> 00:02:43,790
Funkcja wewnętrzna jest wykorzystanie zmiennej A, który został zdefiniowany w funkcji zewnętrznej i przez czas, że to się nazywa ta funkcja zewnętrzna powrócił.

32
00:02:44,070 --> 00:02:51,010
Tak więc funkcja ta wewnętrzna jest zamknięcie podobnie jak inny przykład, który widzieliśmy kilka rzeczy, aby pamiętać tutaj.

33
00:02:51,060 --> 00:03:05,400
Musimy przywrócić wewnętrzną funkcję tę pracę i mamy też możliwość wywoływania funkcji zewnętrznej, a następnie natychmiast wywołać funkcję wewnętrzną lub zapisać wynik wewnętrznej funkcji w zmiennej i wywołać ją później którą powszechnie robić.

34
00:03:05,970 --> 00:03:07,520
Spróbujmy szybkiego ruchu.

35
00:03:07,680 --> 00:03:15,540
Sprawdź, czy możesz dowiedzieć się, czy któryś z tych funkcji zawiera film zamknięcia logiczna dla sekundy.

36
00:03:15,750 --> 00:03:19,740
No dobrze, co pan wymyślić w tej pierwszej funkcji.

37
00:03:19,740 --> 00:03:26,400
Widzimy, że funkcja wewnętrzna nie jest wykorzystanie wszelkich zmiennych znaleźć w zewnętrznej funkcji, która powróciła.

38
00:03:26,550 --> 00:03:31,320
Więc ten tutaj nie zawiera zamknięcia w drugim przykładzie.

39
00:03:31,320 --> 00:03:41,610
Widzimy, że funkcja wewnętrzna jest wykorzystanie danych o zmiennej o nazwie, która została zdefiniowana w zewnętrznej funkcji, która powróciła do czasu funkcja wewnętrzna zostanie wywołana.

40
00:03:42,030 --> 00:03:47,980
Tak więc pierwsza nie jest tylko drugi zawsze wrócić do definicji zamknięcia.

41
00:03:48,150 --> 00:03:56,650
A jeśli zobaczysz, że funkcja wewnętrzna nie jest wykorzystanie zmiennych w funkcji zewnętrznej to chyba nie zamknięcie.

42
00:03:56,820 --> 00:03:58,520
Więc kiedy należałoby użyć zamknięcie.

43
00:03:58,920 --> 00:04:04,200
Dobrze wielki przypadek użycia dla zamknięć jest tworzenie idei prywatnej zmiennej w innych językach.

44
00:04:04,200 --> 00:04:11,520
Istnieje wsparcie dla zmiennych, które nie mogą być modyfikowane z zewnątrz, które nazywamy zmiennych prywatnych, lecz w javascript nie mamy, że zbudowany w.

45
00:04:11,520 --> 00:04:13,780
Na szczęście zamknięcia może nam pomóc z tym.

46
00:04:13,800 --> 00:04:23,960
Warto więc spojrzeć na ten przykład w narzędziach chrome dev w opcji poleceń naciśnij Jagan i otwarcie, że się i mam zamiar napisać funkcję o nazwie licznik i wewnątrz tej funkcji licznika.

47
00:04:23,970 --> 00:04:32,290
Idę do zmiennej o nazwie count tak że równe zeru i wewnątrz tej funkcji licznika Zamierzam powrócić nową funkcję.

48
00:04:32,340 --> 00:04:35,460
Nie zawiadomienie tu, że nie daję tę funkcję nazwę.

49
00:04:35,460 --> 00:04:38,360
To dlatego, że te funkcje są anonimowe.

50
00:04:38,490 --> 00:04:45,100
Więc jeśli chcę nazwać tę funkcję mogę nazwać to coś jak liczenie, ale nie muszą.

51
00:04:45,210 --> 00:04:50,230
A w środku tej wewnętrznej funkcji zamierzam powrócić Plus Plus liczy.

52
00:04:50,250 --> 00:04:58,280
I dlatego, że robię Plus plusa tutaj jako prefiksu operatora jest tak, że po raz pierwszy, że ja to nazywam to idzie do 1.

53
00:04:58,290 --> 00:05:07,010
Teraz mogę ustawić tę funkcję licznika będzie równa zmiennej o nazwie C i będę zapisać R C równa się przeciwstawić.

54
00:05:07,020 --> 00:05:10,130
Teraz to, co myślisz, C będzie kiedy spojrzeć na nią.

55
00:05:10,800 --> 00:05:12,230
No tak jak widzieliśmy wcześniej.

56
00:05:12,300 --> 00:05:20,600
To będzie definicja funkcji, a jeśli zadzwonię C znów mam zamiar wrócić licznik zwiększany o 1.

57
00:05:20,670 --> 00:05:23,060
Nazwijmy go ponownie.

58
00:05:23,220 --> 00:05:30,920
Ale co jest naprawdę miłe jest to, że nikt nie ma dostępu do zmiennej liczby w zakresie, w jakim jestem teraz.

59
00:05:31,050 --> 00:05:35,230
Gdy próbuję uzyskać dostęp do licznika mam zamiar uzyskać odniesienie mówią liczba nie jest zdefiniowana.

60
00:05:35,370 --> 00:05:43,360
A ponieważ liczba jest zmienna prywatna nikt nie może przyjść i zmienić się wartość licznika zaczyna się na niego zawsze będzie wynosić zero.

61
00:05:43,440 --> 00:05:46,810
Zatrzymaj wideo i spróbuj skopiować ten przykład w konsoli chrome.

62
00:05:46,910 --> 00:05:50,210
Pomoże to na wiele się od zrozumienia, jak działają zamknięcia.

63
00:05:50,880 --> 00:05:56,780
Rzućmy okiem na inny przykład zmiennych prywatnych wewnątrz tej funkcji w klasie.

64
00:05:56,790 --> 00:06:01,770
Mam zmienną o nazwie instruktorów która jest tablicą dwóch ciągów nazywa się PR.

65
00:06:01,830 --> 00:06:06,240
Ta funkcja w klasie zwraca obiekt z dwoma funkcjami.

66
00:06:06,450 --> 00:06:18,500
Uzyskaj instruktorzy i instruktorem uzyskać instruktorów pozwala mi po prostu wyświetlić nieładzie na instruktora to funkcja, która trwa w parametrze i dodaje go do tablicy instruktora.

67
00:06:18,570 --> 00:06:20,960
Więc gdzie tam jest zamknięcie się tutaj dzieje.

68
00:06:21,180 --> 00:06:24,640
Dobrze zauważyć, że GET instruktorzy funkcję add instruktora.

69
00:06:24,720 --> 00:06:33,060
Oba wykorzystują Zmienna instruktora, który jest poza tą funkcją tutaj i tej funkcji tutaj.

70
00:06:33,060 --> 00:06:42,750
Tak więc te dwie funkcje uzyskać instruktorów i dodać instruktora używasz zmiennych zdefiniowanych w funkcji zewnętrznych, które zostały już zwrócone.

71
00:06:42,750 --> 00:06:52,250
Widać tu dostać instruktorów pozwala mi wydrukować tablicę Ellen colt i instruktorem pozwala mi dodać instruktora tej tablicy i zwraca teorię.

72
00:06:52,620 --> 00:06:59,920
Ale gdy tworzę nową klasę z innej zmiennej i dostaję instruktorów możemy zobaczyć, że Ian nie ma.

73
00:07:00,000 --> 00:07:06,810
Wreszcie poprzez zastosowanie zamknięcia zrobiliśmy zmienną instruktorów tutaj zmiennej prywatnej.

74
00:07:06,810 --> 00:07:14,530
Nikt nie może go zmodyfikować tak, że w każdej chwili w klasie jest tworzony instruktorów, że masz zawsze będzie się nazywać aleja.

75
00:07:14,760 --> 00:07:24,440
Wygląda więc na to utkniesz z nami przez jakiś czas, więc nawet jeśli mamy mały przykład tu wiele narzędzi i technologii, które będziesz uczyć się korzystać z zamknięciami całkiem sporo.

76
00:07:24,540 --> 00:07:29,050
Więc kiedy patrzysz na niektóre z tym kodem staramy się jak najlepiej, aby zobaczyć, czy można rozpoznać, gdzie są te zamknięcia.

77
00:07:29,250 --> 00:07:31,680
Więc należy zwrócić uwagę na Ciebie.

78
00:07:31,680 --> 00:07:32,830
Więc czego uczymy.

79
00:07:32,850 --> 00:07:41,480
Zamknięcie istnieje, gdy wewnętrzna funkcja wykorzystuje zmiennych zadeklarowanych w funkcji zewnętrznej, który już wrócił i zamknięcia nie istnieją.

80
00:07:41,490 --> 00:07:56,770
Jeśli nie wrócić wewnętrzną funkcję, jeśli wewnętrzna funkcja nie wykorzystują zmiennych zwracanych przez funkcję zewnętrzną widzieliśmy również, że możemy użyć zamknięć do tworzenia zmiennych prywatnych i napisać lepszy kod odizolować naszą logikę i naszą aplikację.

81
00:07:57,690 --> 00:07:58,830
I to wszystko dla zamknięć.
