Witamy spowrotem.
W tym filmie mamy zamiar rozmawiać o zamknięć.
Zamknięcia są jednym z trudniejszych pojęć owinąć wokół twojej głowie.
Ale kiedy naprawdę zrozumieć, co definicja i widziałem kilka z nich to będzie dużo łatwiejsze.
Więc co mamy zamiar zrobić w tym filmie.
Jedziemy, aby zrozumieć, co jest zamknięciem, a co nie jest.
Mamy zamiar użyć zamknięć naśladować zmiennych prywatnych.
Jedziemy do listy kilka przypadków użycia dla zamknięć w realnym świecie.
Więc co jest zamknięcie.
Zamknięcie to funkcja, która sprawia, że ​​wykorzystanie zmiennych zdefiniowanych w funkcji zewnętrznych, które wcześniej zwrócone.
Więc wiem, że definicja może nie mieć zbyt wiele sensu w tej chwili.
Więc spójrzmy na przykład od razu.
Idę naciśnij opcję komendy Jay i otworzyć moje narzędzia chrom Dev.
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ą.
Więc zrobię funkcję o nazwie zewnętrzna wewnątrz tej funkcji Amik zmienną danych, który jest równy ciąg.
Zamknięcia są wewnątrz funkcji zewnętrznej.
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.
Niesamowite.
Teraz wewnątrz tej wewnętrznej funkcji zamierzam powrócić ciąg zamknięcia są z łańcucha.
Niesamowite.
Teraz nazywają tę funkcję zewnętrzną.
A co powinien wrócić do nas.
Cóż to będzie powrót do definicji funkcji wewnętrznej.
Ale zauważmy tutaj wewnątrz tej wewnętrznej funkcji Robię wykorzystanie zmienną danych, które zostały zdefiniowane w funkcji zewnętrznej.
Więc kiedy nazywają tę funkcję zewnętrzną i wewnętrzną wywołać funkcję od razu zwraca łańcuch.
Zamknięcia są niesamowite.
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.
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.
Rzućmy okiem na innym przykładzie.
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.
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ł.
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.
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ć.
Spróbujmy szybkiego ruchu.
Sprawdź, czy możesz dowiedzieć się, czy któryś z tych funkcji zawiera film zamknięcia logiczna dla sekundy.
No dobrze, co pan wymyślić w tej pierwszej funkcji.
Widzimy, że funkcja wewnętrzna nie jest wykorzystanie wszelkich zmiennych znaleźć w zewnętrznej funkcji, która powróciła.
Więc ten tutaj nie zawiera zamknięcia w drugim przykładzie.
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.
Tak więc pierwsza nie jest tylko drugi zawsze wrócić do definicji zamknięcia.
A jeśli zobaczysz, że funkcja wewnętrzna nie jest wykorzystanie zmiennych w funkcji zewnętrznej to chyba nie zamknięcie.
Więc kiedy należałoby użyć zamknięcie.
Dobrze wielki przypadek użycia dla zamknięć jest tworzenie idei prywatnej zmiennej w innych językach.
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.
Na szczęście zamknięcia może nam pomóc z tym.
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.
Idę do zmiennej o nazwie count tak że równe zeru i wewnątrz tej funkcji licznika Zamierzam powrócić nową funkcję.
Nie zawiadomienie tu, że nie daję tę funkcję nazwę.
To dlatego, że te funkcje są anonimowe.
Więc jeśli chcę nazwać tę funkcję mogę nazwać to coś jak liczenie, ale nie muszą.
A w środku tej wewnętrznej funkcji zamierzam powrócić Plus Plus liczy.
I dlatego, że robię Plus plusa tutaj jako prefiksu operatora jest tak, że po raz pierwszy, że ja to nazywam to idzie do 1.
Teraz mogę ustawić tę funkcję licznika będzie równa zmiennej o nazwie C i będę zapisać R C równa się przeciwstawić.
Teraz to, co myślisz, C będzie kiedy spojrzeć na nią.
No tak jak widzieliśmy wcześniej.
To będzie definicja funkcji, a jeśli zadzwonię C znów mam zamiar wrócić licznik zwiększany o 1.
Nazwijmy go ponownie.
Ale co jest naprawdę miłe jest to, że nikt nie ma dostępu do zmiennej liczby w zakresie, w jakim jestem teraz.
Gdy próbuję uzyskać dostęp do licznika mam zamiar uzyskać odniesienie mówią liczba nie jest zdefiniowana.
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.
Zatrzymaj wideo i spróbuj skopiować ten przykład w konsoli chrome.
Pomoże to na wiele się od zrozumienia, jak działają zamknięcia.
Rzućmy okiem na inny przykład zmiennych prywatnych wewnątrz tej funkcji w klasie.
Mam zmienną o nazwie instruktorów która jest tablicą dwóch ciągów nazywa się PR.
Ta funkcja w klasie zwraca obiekt z dwoma funkcjami.
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.
Więc gdzie tam jest zamknięcie się tutaj dzieje.
Dobrze zauważyć, że GET instruktorzy funkcję add instruktora.
Oba wykorzystują Zmienna instruktora, który jest poza tą funkcją tutaj i tej funkcji tutaj.
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.
Widać tu dostać instruktorów pozwala mi wydrukować tablicę Ellen colt i instruktorem pozwala mi dodać instruktora tej tablicy i zwraca teorię.
Ale gdy tworzę nową klasę z innej zmiennej i dostaję instruktorów możemy zobaczyć, że Ian nie ma.
Wreszcie poprzez zastosowanie zamknięcia zrobiliśmy zmienną instruktorów tutaj zmiennej prywatnej.
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.
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.
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.
Więc należy zwrócić uwagę na Ciebie.
Więc czego uczymy.
Zamknięcie istnieje, gdy wewnętrzna funkcja wykorzystuje zmiennych zadeklarowanych w funkcji zewnętrznej, który już wrócił i zamknięcia nie istnieją.
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ę.
I to wszystko dla zamknięć.