1
00:00:00,810 --> 00:00:01,580
Tekrar hoşgeldiniz.

2
00:00:01,710 --> 00:00:04,150
Bu videoda kapanışlar hakkında konuşacağız.

3
00:00:04,800 --> 00:00:08,240
Kapatma, başınızı sarmak için zorlu kavramlardan biridir.

4
00:00:08,370 --> 00:00:12,360
Ancak bir kere tanımın ne olduğunu anladıktan ve onlardan birkaç tanesini gördüm

5
00:00:12,360 --> 00:00:13,570
çok daha kolay olacak.

6
00:00:13,950 --> 00:00:15,720
Peki bu videoda ne yapacağız.

7
00:00:15,720 --> 00:00:18,950
Kapanmanın ne olduğunu ve neyin olmadığını anlarız.

8
00:00:19,200 --> 00:00:22,460
Özel değişkenleri taklit etmek için kapakları kullanacağız.

9
00:00:22,680 --> 00:00:26,360
Gerçek dünyadaki kapanışlar için bazı kullanım örneklerini listeleyeceğiz.

10
00:00:27,210 --> 00:00:28,520
Kapanış ne bitti.

11
00:00:28,830 --> 00:00:35,190
Kapatma, daha önce döndürülen dış işlevlerde tanımlanan değişkenleri kullanan bir

12
00:00:35,220 --> 00:00:36,180
işlevdir.

13
00:00:36,690 --> 00:00:39,540
Bu yüzden tanımın şu an çok fazla anlamı olmayabileceğini biliyorum.

14
00:00:39,690 --> 00:00:41,580
Şimdi hemen bir örneğe göz atalım.

15
00:00:42,030 --> 00:00:47,210
Komut seçeneği Jay'a basacağım ve chrome dev araçlarımı açacağım.

16
00:00:47,370 --> 00:00:52,670
tanımlanan değişkenleri iyi kullanan bir işlev olduğunu söylersek, o zaman bir dış işlev yapalım.

17
00:00:52,800 --> 00:00:54,420
Şimdi bir kapatmanın, işlevlerimizde

18
00:00:54,630 --> 00:01:01,410
Bu yüzden, amik işlevinin dışındaki bir fonksiyonu, dize eşit olan data adlı bir

19
00:01:01,410 --> 00:01:02,200
değişkeni yapacağım.

20
00:01:02,220 --> 00:01:06,680
Kapamalar, dış işlevin bir iç kısmıdır.

21
00:01:06,690 --> 00:01:15,480
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

22
00:01:15,510 --> 00:01:19,130
değişken yapacağım ve iç veri dizeye eşit.

23
00:01:19,140 --> 00:01:20,520
Muhteşem.

24
00:01:21,570 --> 00:01:28,820
Şimdi bu iç işleve içinde dize kapanışlarını dize döndürmek istiyorum.

25
00:01:28,830 --> 00:01:32,180
Muhteşem.

26
00:01:32,940 --> 00:01:34,660
Şimdi bu dış fonksiyonu çağıralım.

27
00:01:35,400 --> 00:01:36,870
Ve bize ne dönmeli?

28
00:01:36,990 --> 00:01:40,140
İç işlevin tanımını geri getirecek.

29
00:01:40,410 --> 00:01:46,800
Ancak burada, bu iç işlevin içinde, dış işlevde tanımlanan

30
00:01:46,800 --> 00:01:49,080
data değişkenini kullanıyorum.

31
00:01:49,110 --> 00:01:55,280
Bu yüzden, bu dış fonksiyonu çağırdığımda ve iç fonksiyonu derhal çağırıyorum, dize döndürür.

32
00:01:55,320 --> 00:01:57,480
Kapatma müthiş.

33
00:01:57,480 --> 00:02:03,930
Dolayısıyla şu anda kapanışların gücünü göremeyebilirsiniz, ancak bu, bu veri değişkeni gibi

34
00:02:04,230 --> 00:02:11,100
dış işlevlerde tanımlanan değişkenleri burada bir iç işlevin içinde kullanmanın iyi bir örneğidir.

35
00:02:11,100 --> 00:02:16,680
Dış işlev zaten burada bildirim döndürdüğünde dış işlev döndürülür ancak

36
00:02:16,680 --> 00:02:22,730
dış işlev zaten döndüğüne rağmen bu veri değişkenini yine de kullanabilirim.

37
00:02:23,610 --> 00:02:25,680
Başka bir örneğe bir göz atalım.

38
00:02:25,950 --> 00:02:31,050
Burada, A parametresini alır ve bir parametre b alır İçer adlı bir işlev

39
00:02:31,080 --> 00:02:33,730
döndüren Outer adlı bir işleve sahip.

40
00:02:34,320 --> 00:02:40,980
tanımlanan A değişkenini ve dış işlevin geri döndüğü zamanı kullanarak kullanmaktadır.

41
00:02:40,980 --> 00:02:43,790
İç işlev, dış işlevde

42
00:02:44,070 --> 00:02:50,610
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

43
00:02:50,610 --> 00:02:51,010
kapanıştır.

44
00:02:51,060 --> 00:02:56,280
Bunun çalışması için iç işleve dönmeliyiz ve dış işlevi çağırma ve

45
00:02:56,280 --> 00:03:01,620
iç işleve derhal çağırma veya iç işlecin sonucunu bir değişkende saklama ve

46
00:03:01,620 --> 00:03:05,400
daha sonra sıkça yaptığımız işlevi çağırma kabiliyetine sahibiz.

47
00:03:05,970 --> 00:03:07,520
Hadi hızlı bir egzersiz yapalım.

48
00:03:07,680 --> 00:03:15,540
Bu işlevlerden birinin bir saniye için bir kapatma bulmaca videosu içerdiğini anlamanıza yardımcı olup olmadığına bakın.

49
00:03:15,750 --> 00:03:19,740
Pekâlâ, bu ilk iş olarak neyi buldun.

50
00:03:19,740 --> 00:03:25,410
İç işlevin, döndüren bir dış işlevi bulmak için herhangi bir değişken

51
00:03:25,410 --> 00:03:26,400
kullanmadığını görebiliriz.

52
00:03:26,550 --> 00:03:31,320
Bu yüzden buradaki ikinci örnekte bir kapanış bulunmamaktadır.

53
00:03:31,320 --> 00:03:36,900
İç işlevin, iç işlev çağrılma zamanına kadar geri dönen bir dış

54
00:03:36,900 --> 00:03:41,610
işlev içinde tanımlanan veri adlı bir değişkenin kullanıldığını görebiliriz.

55
00:03:42,030 --> 00:03:47,980
Birincisi değil, ikincisi daima bir kapanış tanımına geri dönüyor.

56
00:03:48,150 --> 00:03:54,030
bir dış işlevdeki değişkenleri kullanmadığını görürseniz muhtemelen bir kapanış değildir.

57
00:03:54,090 --> 00:03:56,650
Ve eğer iç işlevin

58
00:03:56,820 --> 00:03:58,520
Peki ne zaman bir kapatma kullanacaktınız.

59
00:03:58,920 --> 00:04:04,200
Kapanışlar için mükemmel bir kullanım örneği, diğer dillerde özel bir değişken fikrini oluşturmaktır.

60
00:04:04,200 --> 00:04:08,640
Dışarıda değiştirilemeyen, özel değişkenler olarak adlandırdığımız değişkenler için destek var,

61
00:04:08,790 --> 00:04:11,520
ancak javascript içinde yerleşik olmadığı gibi.

62
00:04:11,520 --> 00:04:13,780
Neyse ki kapatmalar bize yardımcı olabilir.

63
00:04:13,800 --> 00:04:18,810
Bu nedenle, bu örnekte chrome dev araçlarında bir basın komutu seçeneği olan Jagan'da bir

64
00:04:18,810 --> 00:04:23,960
göz atalım ve bunu açın ve sayaç ve bu sayaç işlevinin içinde bir işlev yazacağım.

65
00:04:23,970 --> 00:04:30,000
Count adında bir değişkeni sıfıra eşit hale getireceğim ve bu sayaç işlevinin

66
00:04:30,090 --> 00:04:32,290
içinde yeni bir işlev döndüreceğim.

67
00:04:32,340 --> 00:04:35,460
Burada hiçbir şey fark etmiyorum, bu işleve bir isim vermiyorum.

68
00:04:35,460 --> 00:04:38,360
Bunun nedeni, bu işlevlerin anonim olmasıdır.

69
00:04:38,490 --> 00:04:45,100
Bu yüzden bu işlevi isimlendirmek istersem buna sayma gibi bir şey diyebilirim ama buna gerek yok.

70
00:04:45,210 --> 00:04:50,230
Ve bu iç işlevin içinde artı artı sayıya geri döneceğim.

71
00:04:50,250 --> 00:04:55,380
Ve artı burada bir önek işleci olarak yapmamın sebebi, ilk

72
00:04:55,380 --> 00:04:58,280
kez dediğimde 1'e kadar çıkmasıdır.

73
00:04:58,290 --> 00:05:04,500
Şimdi bu sayaç işlevi C olarak adlandırılan bir değişkene eşit olarak ayarlanabilir ve R

74
00:05:04,530 --> 00:05:07,010
C'yi sayaca eşit olarak kaydederim.

75
00:05:07,020 --> 00:05:10,130
Şimdi C'ye bir göz attığımda ne olacağını düşünüyorsun?

76
00:05:10,800 --> 00:05:12,230
Tıpkı daha önce gördüğümüz gibi.

77
00:05:12,300 --> 00:05:19,440
Bir işlev tanımı olacak ve eğer C'yi tekrar çağırırsam, artan sayımı

78
00:05:19,590 --> 00:05:20,600
1 döndüreceğim.

79
00:05:20,670 --> 00:05:23,060
Buna tekrar tekrar diyelim.

80
00:05:23,220 --> 00:05:29,790
konuda gerçekten hoş olan şey şu an içinde bulunduğum kapsamdaki değişken sayısına kimsenin erişememesi.

81
00:05:29,790 --> 00:05:30,920
Ancak bu

82
00:05:31,050 --> 00:05:35,230
Sayıma erişmeye çalışırsam, referansın tanımlanmadığını söyleyen bir referans alırım.

83
00:05:35,370 --> 00:05:41,040
Sayım özel bir değişkendir çünkü kimse içeri giremez ve sayım değeri değişirse

84
00:05:41,040 --> 00:05:43,360
değişir, daima sıfır olacak demektir.

85
00:05:43,440 --> 00:05:46,810
Videoyu duraklatın ve bu örneği chrome konsolunda kopyalamayı deneyin.

86
00:05:46,910 --> 00:05:50,210
Kapakların nasıl çalıştığını anlamak çok yardımcı olacaktır.

87
00:05:50,880 --> 00:05:56,780
Şimdi bu sınıf işlevinin içindeki özel değişkenlerin bir örneğine göz atalım.

88
00:05:56,790 --> 00:06:01,770
LP adlı iki dizgiden oluşan bir eğitmen olarak adlandırılan bir değişkenim var.

89
00:06:01,830 --> 00:06:06,240
Bu sınıf işlevi, iki işlev içeren bir nesne döndürür.

90
00:06:06,450 --> 00:06:13,320
Eğitmenler ve bir eğitmen alın, eğitmenler bana eğiticide dağınık görüntülememi

91
00:06:13,410 --> 00:06:18,500
sağlar, bir parametre alır ve eğitmenin dizisine ekler.

92
00:06:18,570 --> 00:06:20,960
Burada burada kapatma var.

93
00:06:21,180 --> 00:06:24,640
GET öğretim elemanlarının eğitmen fonksiyonu eklediğine dikkat et.

94
00:06:24,720 --> 00:06:31,860
Her ikisi de burada bu fonksiyonun dışında bulunan bu eğiticinin değişkenini kullanır ve bu

95
00:06:31,860 --> 00:06:33,060
fonksiyon burada.

96
00:06:33,060 --> 00:06:40,320
eğitmenleri alır ve eğitici ekler zaten döndürülen dış işlevlerde tanımlanan değişkenleri kullanır.

97
00:06:40,680 --> 00:06:42,750
Böylece bu iki işlev

98
00:06:42,750 --> 00:06:48,750
Burada, eğitmenlerden Ellen colt dizisini yazdırabilmelerini sağladıklarını görebilirim ve eğitmen bana bu diziye

99
00:06:48,870 --> 00:06:52,250
bir eğitmen katmamı ve teori döndürmemi sağlar.

100
00:06:52,620 --> 00:06:58,470
Fakat başka bir değişkene sahip yeni bir sınıf oluşturduğumda ve eğitmenleri alırsak, Ian'ın

101
00:06:58,470 --> 00:06:59,920
burada olmadığını görebilirim.

102
00:07:00,000 --> 00:07:06,810
Sonunda kapanış yöntemini kullanarak öğretmenleri burada özel bir değişkene yaptık.

103
00:07:06,810 --> 00:07:12,990
Hiç kimse onu değiştiremez, böylece bir sınıf oluşturulduğunda, aldığınız öğretmenlerin her zaman bir

104
00:07:12,990 --> 00:07:14,530
sokak olarak adlandırılacaktır.

105
00:07:14,760 --> 00:07:19,380
Dolayısıyla, küçük bir örneğe sahip olduğumuz halde, kısa bir süre için bize takılıp

106
00:07:19,680 --> 00:07:24,440
kaldınız gibi görünüyor; burada öğreneceğiniz pek çok araç ve teknoloji biraz kapak kullanıyor.

107
00:07:24,540 --> 00:07:28,560
Bu koddan bazılarına baktığınızda, bu kapanışların nerede olduğunu bulup bulamayacağınızı görmek için elinizden

108
00:07:28,560 --> 00:07:29,050
geleni yapın.

109
00:07:29,250 --> 00:07:31,680
Size de dikkat çektiğinizden emin olun.

110
00:07:31,680 --> 00:07:32,830
Öyleyse ne öğreneceğiz

111
00:07:32,850 --> 00:07:38,550
Bir iç işlev, zaten döndürülen ve kapatma mevcut olmayan dış işlevde

112
00:07:38,550 --> 00:07:41,480
bildirilen değişkenleri kullandığında bir kapatma oluşur.

113
00:07:41,490 --> 00:07:47,250
Bir iç işlev döndürmezseniz ve bu iç işlev, bir dış işlev tarafından

114
00:07:47,310 --> 00:07:52,980
döndürülen değişkenleri kullanmazsa, özel değişkenler oluşturmak için kapakları kullanabildiğimizi ve mantığımızı ve

115
00:07:52,980 --> 00:07:56,770
uygulamanızı ayırmak için daha iyi kodlar yazdığımızı gördük.

116
00:07:57,690 --> 00:07:58,830
Ve kapanışlar için bu kadar.

117
00:07:58,830 --> 00:07:59,710
Bir sonraki videoda görüşürüz
