1
00:00:00,810 --> 00:00:01,580
歡迎回來。

2
00:00:01,710 --> 00:00:04,150
在這段視頻中，我們要談論關閉。

3
00:00:04,800 --> 00:00:08,240
閉包是更具挑戰性的概念來包裝你的頭周圍之一。

4
00:00:08,370 --> 00:00:13,570
但是，一旦你真正了解的定義是，我已經看到他們夫婦這將是一個容易得多。

5
00:00:13,950 --> 00:00:15,720
那麼，什麼是我們要在這個視頻做。

6
00:00:15,720 --> 00:00:18,950
我們要了解什麼是封閉的，哪些不是。

7
00:00:19,200 --> 00:00:22,460
我們將使用閉包來模擬私有變量。

8
00:00:22,680 --> 00:00:26,360
我們將列出一些用例在現實世界中倒閉。

9
00:00:27,210 --> 00:00:28,520
那麼什麼是關閉。

10
00:00:28,830 --> 00:00:36,180
閉包是一個函數，利用在先前返回外函數定義的變量。

11
00:00:36,690 --> 00:00:39,540
所以我知道該定義可能沒有太大的意義現在。

12
00:00:39,690 --> 00:00:41,580
所以，讓我們一個例子看看的時候了。

13
00:00:42,030 --> 00:00:47,210
我會按命令選項周杰倫，打開了我的Chrome開發工具。

14
00:00:47,370 --> 00:00:54,420
現在，如果我們說，一個閉包是一個函數，利用了我們的函數中定義的變量那麼就讓我們做一個外的功能。

15
00:00:54,630 --> 00:01:02,200
所以，我會做一個調用此函數amik一個變量稱為數據等於字符串的內外部功能。

16
00:01:02,220 --> 00:01:06,680
封是外部函數的內部。

17
00:01:06,690 --> 00:01:19,130
我將返​​回一個名為這種內在的功能和內內的新功能或進行所謂的內部數據和內部數據變量等於字符串。

18
00:01:19,140 --> 00:01:20,520
真棒。

19
00:01:21,570 --> 00:01:28,820
現在，這個內部函數裡面我將返回字符串閉包是用字符串。

20
00:01:28,830 --> 00:01:32,180
真棒。

21
00:01:32,940 --> 00:01:34,660
現在讓我們來調用這個外部函數。

22
00:01:35,400 --> 00:01:36,870
而且它應該回到我們的身邊。

23
00:01:36,990 --> 00:01:40,140
那麼它將會返回內部函數的定義。

24
00:01:40,410 --> 00:01:49,080
但這裡要注意，我利用這是在外部函數中定義的變量稱為數據的這種內在功能裡面。

25
00:01:49,110 --> 00:01:55,280
所以，當我把這種外部函數和我所說的內部函數馬上返回字符串。

26
00:01:55,320 --> 00:01:57,480
閉包是真棒。

27
00:01:57,480 --> 00:02:11,100
所以，你可能沒有真正看到關閉的權力，但現在這是使用外部函數定義這樣的數據變量在這裡的內部函數內部變量只是一個很好的例子。

28
00:02:11,100 --> 00:02:22,730
當外部函數已經返回通知這裡返回外部函數，但我仍然可以使用，即使外部函數已經返回該數據變量。

29
00:02:23,610 --> 00:02:25,680
讓我們來看看另一個例子。

30
00:02:25,950 --> 00:02:33,730
在這裡我我有一個叫做外部函數，它在參數A和它返回一個名為Inner的函數，它接受一個參數b。

31
00:02:34,320 --> 00:02:43,790
內部功能是利用其在外部函數和由它調用的外部函數返回時定義的變量A的。

32
00:02:44,070 --> 00:02:51,010
所以這個函數內部是一個封閉就像我們看到了幾件事情，這裡要注意的另一個例子。

33
00:02:51,060 --> 00:03:05,400
我們必須回到這個工作，我們也有調用外部函數，然後立即調用內部函數或存儲在一個變量的內部函數的結果，後來稱之為我們通常做的能力，內部函數。

34
00:03:05,970 --> 00:03:07,520
讓我們試著快速運動。

35
00:03:07,680 --> 00:03:15,540
看看你是否能找出如果這些功能包含第二封閉拼圖視頻。

36
00:03:15,750 --> 00:03:19,740
好吧你是怎麼想出這個第一個函數。

37
00:03:19,740 --> 00:03:26,400
我們可以看到，內部功能未利用任何變量在返回該外函數查找。

38
00:03:26,550 --> 00:03:31,320
所以這一塊就在這裡不包含在第二個例子中的閉包。

39
00:03:31,320 --> 00:03:41,610
我們可以看到，內在功能是利用其在已經由內部函數將被調用時返回外部函數中定義的變量稱為數據。

40
00:03:42,030 --> 00:03:47,980
所以第一個不是但第二個總是要回到封閉的定義。

41
00:03:48,150 --> 00:03:56,650
如果你看到內部函數未在外部函數利用變量它可能不是一個封閉。

42
00:03:56,820 --> 00:03:58,520
所以，你什麼時候會使用閉包。

43
00:03:58,920 --> 00:04:04,200
好一個偉大的用例倒閉是建立在其他語言中一個私有變量的想法。

44
00:04:04,200 --> 00:04:11,520
存在變量不能被外部修改，我們稱之為私有變量，但在JavaScript中，我們沒有這樣的內置支持。

45
00:04:11,520 --> 00:04:13,780
值得慶幸的是封閉可以幫助我們了這一點。

46
00:04:13,800 --> 00:04:23,960
因此，讓我們在新聞命令選項賈根看看這個例子中的Chrome瀏覽器開發工具，並打開了，我打算寫一個函數調用計數器，這個計數器功能的內部。

47
00:04:23,970 --> 00:04:32,290
我要做一個變量，名為計數，以便等於零，並且這裡面計數器功能我將返回一個新的功能。

48
00:04:32,340 --> 00:04:35,460
沒有通知就在這裡，我不是給這個函數的名稱。

49
00:04:35,460 --> 00:04:38,360
這是因為這些功能是匿名的。

50
00:04:38,490 --> 00:04:45,100
所以，如果我想命名這個功能，我可以把這個像計數，但我不需要。

51
00:04:45,210 --> 00:04:50,230
而這個內部函數裡面我要回加算加。

52
00:04:50,250 --> 00:04:58,280
而且，我做加加上這裡作為一個前綴操作符的原因是為了讓第一次，我把它稱為它上升到1。

53
00:04:58,290 --> 00:05:07,010
現在我可以設置這個計數器功能等於一個名為C變量，我會救R C等於計數器。

54
00:05:07,020 --> 00:05:10,130
現在，你是什麼認為C將是，當我看看吧。

55
00:05:10,800 --> 00:05:12,230
那麼就像我們之前看到的。

56
00:05:12,300 --> 00:05:20,600
這將是一個函數的定義，如果我調用C再次我要返回加1計數。

57
00:05:20,670 --> 00:05:23,060
讓我們一次又一次地調用它。

58
00:05:23,220 --> 00:05:30,920
但是，什麼是真的很好這個是沒有人可以訪問變量計數，我在現在正範圍。

59
00:05:31,050 --> 00:05:35,230
如果我嘗試訪問計數我要得到一個參考是說沒有定義計數。

60
00:05:35,370 --> 00:05:43,360
而且，由於計數是一個私有變量沒有人能進來，並與計數值在它開始總是會為零改變。

61
00:05:43,440 --> 00:05:46,810
暫停視頻，並嘗試在Chrome控制台來複製這個例子。

62
00:05:46,910 --> 00:05:50,210
這將幫助了很多與理解閉包是如何工作的。

63
00:05:50,880 --> 00:05:56,780
讓我們來看看這個教室函數內的私有變量的另一個例子。

64
00:05:56,790 --> 00:06:01,770
我有一個變量稱為導師是被稱為LP兩個字符串數組。

65
00:06:01,830 --> 00:06:06,240
這樣的課堂函數返回兩個函數的對象。

66
00:06:06,450 --> 00:06:18,500
獲得導師和講師得到導師允許我只是顯示在教練雜亂是一個函數，它接受一個參數，並把它添加到老師的數組。

67
00:06:18,570 --> 00:06:20,960
那麼，有沒有封怎麼回事。

68
00:06:21,180 --> 00:06:24,640
好吧注意到GET教官一個附加功能教官。

69
00:06:24,720 --> 00:06:33,060
它們都利用這個老師的變量是這裡這個功能，在這裡這個功能之外。

70
00:06:33,060 --> 00:06:42,750
因此，這兩個函數得到導師和講師添加使用在已經返回外部函數定義的變量。

71
00:06:42,750 --> 00:06:52,250
你可以看到在這裡他們得到教練讓我打印出來埃倫小馬的陣列和教練讓我的教練添加到該數組，並返回理論。

72
00:06:52,620 --> 00:06:59,920
但是，當我創建另一個變量一個新的教室，我得到了教官，我們可以看到，伊恩是不是在這裡。

73
00:07:00,000 --> 00:07:06,810
最後，通過採用封閉我們所做的教官變量在這裡的私有變量。

74
00:07:06,810 --> 00:07:14,530
沒有人能夠隨時使修改它，一個教室創建教官，你得到總是會被稱為胡同。

75
00:07:14,760 --> 00:07:24,440
所以它看起來像你堅持跟我們一小會兒所以儘管我們這裡有一個小例子有很多工具和技術，你將學習使用倒閉了不少。

76
00:07:24,540 --> 00:07:29,050
所以，當你正在尋找一些代碼，盡你所能，看看你能發現那些在哪裡都關閉。

77
00:07:29,250 --> 00:07:31,680
那麼一定要指出來你。

78
00:07:31,680 --> 00:07:32,830
那麼，我們學習。

79
00:07:32,850 --> 00:07:41,480
當一個內部功能使用的它已經返回和關閉不存在外函數聲明的變量封存在。

80
00:07:41,490 --> 00:07:56,770
如果不返回一個內部函數，如果該內部函數不使用由外部函數返回的變量，我們也看到了，我們可以使用閉包來創建私有變量和編寫更好的代碼隔離我們的邏輯和我們的應用程序。

81
00:07:57,690 --> 00:07:58,830
這就是它的閉包。
