Tekrar hoşgeldiniz.
Bu videoda kapanışlar hakkında konuşacağız.
Kapatma, başınızı sarmak için zorlu kavramlardan biridir.
Ancak bir kere tanımın ne olduğunu anladıktan ve onlardan birkaç tanesini gördüm
çok daha kolay olacak.
Peki bu videoda ne yapacağız.
Kapanmanın ne olduğunu ve neyin olmadığını anlarız.
Özel değişkenleri taklit etmek için kapakları kullanacağız.
Gerçek dünyadaki kapanışlar için bazı kullanım örneklerini listeleyeceğiz.
Kapanış ne bitti.
Kapatma, daha önce döndürülen dış işlevlerde tanımlanan değişkenleri kullanan bir
işlevdir.
Bu yüzden tanımın şu an çok fazla anlamı olmayabileceğini biliyorum.
Şimdi hemen bir örneğe göz atalım.
Komut seçeneği Jay'a basacağım ve chrome dev araçlarımı açacağım.
tanımlanan değişkenleri iyi kullanan bir işlev olduğunu söylersek, o zaman bir dış işlev yapalım.
Şimdi bir kapatmanın, işlevlerimizde
Bu yüzden, amik işlevinin dışındaki bir fonksiyonu, dize eşit olan data adlı bir
değişkeni yapacağım.
Kapamalar, dış işlevin bir iç kısmıdır.
Inner adlı yeni bir işlev döndüreceğim ve bu iç işlevin içinde veya iç veri olarak adlandırılan bir
değişken yapacağım ve iç veri dizeye eşit.
Muhteşem.
Şimdi bu iç işleve içinde dize kapanışlarını dize döndürmek istiyorum.
Muhteşem.
Şimdi bu dış fonksiyonu çağıralım.
Ve bize ne dönmeli?
İç işlevin tanımını geri getirecek.
Ancak burada, bu iç işlevin içinde, dış işlevde tanımlanan
data değişkenini kullanıyorum.
Bu yüzden, bu dış fonksiyonu çağırdığımda ve iç fonksiyonu derhal çağırıyorum, dize döndürür.
Kapatma müthiş.
Dolayısıyla şu anda kapanışların gücünü göremeyebilirsiniz, ancak bu, bu veri değişkeni gibi
dış işlevlerde tanımlanan değişkenleri burada bir iç işlevin içinde kullanmanın iyi bir örneğidir.
Dış işlev zaten burada bildirim döndürdüğünde dış işlev döndürülür ancak
dış işlev zaten döndüğüne rağmen bu veri değişkenini yine de kullanabilirim.
Başka bir örneğe bir göz atalım.
Burada, A parametresini alır ve bir parametre b alır İçer adlı bir işlev
döndüren Outer adlı bir işleve sahip.
tanımlanan A değişkenini ve dış işlevin geri döndüğü zamanı kullanarak kullanmaktadır.
İç işlev, dış işlevde
Dolayısıyla, bu işlevin iç kısmı, diğer örnekte olduğu gibi, burada belirtilmesi gereken birkaç şeyi gördüğümüz gibi bir
kapanıştır.
Bunun çalışması için iç işleve dönmeliyiz ve dış işlevi çağırma ve
iç işleve derhal çağırma veya iç işlecin sonucunu bir değişkende saklama ve
daha sonra sıkça yaptığımız işlevi çağırma kabiliyetine sahibiz.
Hadi hızlı bir egzersiz yapalım.
Bu işlevlerden birinin bir saniye için bir kapatma bulmaca videosu içerdiğini anlamanıza yardımcı olup olmadığına bakın.
Pekâlâ, bu ilk iş olarak neyi buldun.
İç işlevin, döndüren bir dış işlevi bulmak için herhangi bir değişken
kullanmadığını görebiliriz.
Bu yüzden buradaki ikinci örnekte bir kapanış bulunmamaktadır.
İç işlevin, iç işlev çağrılma zamanına kadar geri dönen bir dış
işlev içinde tanımlanan veri adlı bir değişkenin kullanıldığını görebiliriz.
Birincisi değil, ikincisi daima bir kapanış tanımına geri dönüyor.
bir dış işlevdeki değişkenleri kullanmadığını görürseniz muhtemelen bir kapanış değildir.
Ve eğer iç işlevin
Peki ne zaman bir kapatma kullanacaktınız.
Kapanışlar için mükemmel bir kullanım örneği, diğer dillerde özel bir değişken fikrini oluşturmaktır.
Dışarıda değiştirilemeyen, özel değişkenler olarak adlandırdığımız değişkenler için destek var,
ancak javascript içinde yerleşik olmadığı gibi.
Neyse ki kapatmalar bize yardımcı olabilir.
Bu nedenle, bu örnekte chrome dev araçlarında bir basın komutu seçeneği olan Jagan'da bir
göz atalım ve bunu açın ve sayaç ve bu sayaç işlevinin içinde bir işlev yazacağım.
Count adında bir değişkeni sıfıra eşit hale getireceğim ve bu sayaç işlevinin
içinde yeni bir işlev döndüreceğim.
Burada hiçbir şey fark etmiyorum, bu işleve bir isim vermiyorum.
Bunun nedeni, bu işlevlerin anonim olmasıdır.
Bu yüzden bu işlevi isimlendirmek istersem buna sayma gibi bir şey diyebilirim ama buna gerek yok.
Ve bu iç işlevin içinde artı artı sayıya geri döneceğim.
Ve artı burada bir önek işleci olarak yapmamın sebebi, ilk
kez dediğimde 1'e kadar çıkmasıdır.
Şimdi bu sayaç işlevi C olarak adlandırılan bir değişkene eşit olarak ayarlanabilir ve R
C'yi sayaca eşit olarak kaydederim.
Şimdi C'ye bir göz attığımda ne olacağını düşünüyorsun?
Tıpkı daha önce gördüğümüz gibi.
Bir işlev tanımı olacak ve eğer C'yi tekrar çağırırsam, artan sayımı
1 döndüreceğim.
Buna tekrar tekrar diyelim.
konuda gerçekten hoş olan şey şu an içinde bulunduğum kapsamdaki değişken sayısına kimsenin erişememesi.
Ancak bu
Sayıma erişmeye çalışırsam, referansın tanımlanmadığını söyleyen bir referans alırım.
Sayım özel bir değişkendir çünkü kimse içeri giremez ve sayım değeri değişirse
değişir, daima sıfır olacak demektir.
Videoyu duraklatın ve bu örneği chrome konsolunda kopyalamayı deneyin.
Kapakların nasıl çalıştığını anlamak çok yardımcı olacaktır.
Şimdi bu sınıf işlevinin içindeki özel değişkenlerin bir örneğine göz atalım.
LP adlı iki dizgiden oluşan bir eğitmen olarak adlandırılan bir değişkenim var.
Bu sınıf işlevi, iki işlev içeren bir nesne döndürür.
Eğitmenler ve bir eğitmen alın, eğitmenler bana eğiticide dağınık görüntülememi
sağlar, bir parametre alır ve eğitmenin dizisine ekler.
Burada burada kapatma var.
GET öğretim elemanlarının eğitmen fonksiyonu eklediğine dikkat et.
Her ikisi de burada bu fonksiyonun dışında bulunan bu eğiticinin değişkenini kullanır ve bu
fonksiyon burada.
eğitmenleri alır ve eğitici ekler zaten döndürülen dış işlevlerde tanımlanan değişkenleri kullanır.
Böylece bu iki işlev
Burada, eğitmenlerden Ellen colt dizisini yazdırabilmelerini sağladıklarını görebilirim ve eğitmen bana bu diziye
bir eğitmen katmamı ve teori döndürmemi sağlar.
Fakat başka bir değişkene sahip yeni bir sınıf oluşturduğumda ve eğitmenleri alırsak, Ian'ın
burada olmadığını görebilirim.
Sonunda kapanış yöntemini kullanarak öğretmenleri burada özel bir değişkene yaptık.
Hiç kimse onu değiştiremez, böylece bir sınıf oluşturulduğunda, aldığınız öğretmenlerin her zaman bir
sokak olarak adlandırılacaktır.
Dolayısıyla, küçük bir örneğe sahip olduğumuz halde, kısa bir süre için bize takılıp
kaldınız gibi görünüyor; burada öğreneceğiniz pek çok araç ve teknoloji biraz kapak kullanıyor.
Bu koddan bazılarına baktığınızda, bu kapanışların nerede olduğunu bulup bulamayacağınızı görmek için elinizden
geleni yapın.
Size de dikkat çektiğinizden emin olun.
Öyleyse ne öğreneceğiz
Bir iç işlev, zaten döndürülen ve kapatma mevcut olmayan dış işlevde
bildirilen değişkenleri kullandığında bir kapatma oluşur.
Bir iç işlev döndürmezseniz ve bu iç işlev, bir dış işlev tarafından
döndürülen değişkenleri kullanmazsa, özel değişkenler oluşturmak için kapakları kullanabildiğimizi ve mantığımızı ve
uygulamanızı ayırmak için daha iyi kodlar yazdığımızı gördük.
Ve kapanışlar için bu kadar.
Bir sonraki videoda görüşürüz