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
閉鎖は、あなたの頭を包み込むためのより困難なコンセプトの1つです。

4
00:00:08,370 --> 00:00:12,360
しかし、いったん定義が何であるかを本当に理解すれば、私はそれらのカップルを見たことがずっと簡単になるだろう。

5
00:00:12,360 --> 00:00:13,570
&nbsp;

6
00:00:13,950 --> 00:00:15,720
では、このビデオで何をするつもりですか？

7
00:00:15,720 --> 00:00:18,950
私たちは、クロージャが何であるか、それが何でないかを理解するつもりです。

8
00:00:19,200 --> 00:00:22,460
クロージャを使用してプライベート変数をエミュレートします。

9
00:00:22,680 --> 00:00:26,360
現実世界でのクロージャの使用例をいくつか挙げます。

10
00:00:27,210 --> 00:00:28,520
クローズは何ですか？

11
00:00:28,830 --> 00:00:35,190
クロージャは、以前に返された外部関数で定義された変数を使用する関数です。

12
00:00:35,220 --> 00:00:36,180
&nbsp;

13
00:00:36,690 --> 00:00:39,540
だから私は今定義があまり意味がないかもしれないことを知っている。

14
00:00:39,690 --> 00:00:41,580
ではすぐに例を見てみましょう。

15
00:00:42,030 --> 00:00:47,210
コマンドオプションJayを押して、私のchrome開発ツールを開きます。

16
00:00:47,370 --> 00:00:52,670
クロージャーは、関数で定義された変数をよく使う関数であるとすれば、外部関数を作りましょう。

17
00:00:52,800 --> 00:00:54,420
&nbsp;

18
00:00:54,630 --> 00:01:01,410
ですから、この関数の外側にある関数amikを、文字列と同じdataという変数にします。

19
00:01:01,410 --> 00:01:02,200
&nbsp;

20
00:01:02,220 --> 00:01:06,680
クロージャーは外側の機能の内側にあります。

21
00:01:06,690 --> 00:01:15,480
私は内部関数と内部関数という新しい関数を返すか、内部データと呼ばれる変数を作り、内部データは文字列と等しくなります。

22
00:01:15,510 --> 00:01:19,130
&nbsp;

23
00:01:19,140 --> 00:01:20,520
驚くばかり。

24
00:01:21,570 --> 00:01:28,820
今この内部関数の中で、文字列クロージャが文字列で返されます。

25
00:01:28,830 --> 00:01:32,180
驚くばかり。

26
00:01:32,940 --> 00:01:34,660
さて、この外部関数を呼び出しましょう。

27
00:01:35,400 --> 00:01:36,870
それは私たちに何を返すべきか？

28
00:01:36,990 --> 00:01:40,140
それは内部関数の定義を返すことになるでしょう。

29
00:01:40,410 --> 00:01:46,800
しかし、この内部関数の内部では、外部関数で定義された変数というデータを使用しています。

30
00:01:46,800 --> 00:01:49,080
&nbsp;

31
00:01:49,110 --> 00:01:55,280
だから私はこの外部関数を呼び出すと、すぐに内部関数を呼び出して、文字列を返します。

32
00:01:55,320 --> 00:01:57,480
閉鎖は素晴らしいです。

33
00:01:57,480 --> 00:02:03,930
&nbsp;

34
00:02:04,230 --> 00:02:11,100
だから、今は閉鎖の力を実際に見ることはできないかもしれませんが、これは内部関数の内部にこのデータ変数のような外部関数で定義された変数を使う良い例です。

35
00:02:11,100 --> 00:02:16,680
&nbsp;

36
00:02:16,680 --> 00:02:22,730
外部関数がすでにここで通知を返すと、外部関数が返されますが、外部関数が既に返されていてもこのデータ変数を使用することができます。

37
00:02:23,610 --> 00:02:25,680
別の例を見てみましょう。

38
00:02:25,950 --> 00:02:31,050
ここで私は、パラメータAを取り入れ、パラメータbをとるInnerという関数を返すOuterという関数があります。

39
00:02:31,080 --> 00:02:33,730
&nbsp;

40
00:02:34,320 --> 00:02:40,980
内部関数は、外部関数で定義された変数Aを使用しており、外部関数が返されたときにその変数を使用しています。

41
00:02:40,980 --> 00:02:43,790
&nbsp;

42
00:02:44,070 --> 00:02:50,610
ですから、この関数innerは他の例と同様にクロージャです。ここで注意すべきことがいくつかあります。

43
00:02:50,610 --> 00:02:51,010
&nbsp;

44
00:02:51,060 --> 00:02:56,280
&nbsp;

45
00:02:56,280 --> 00:03:01,620
&nbsp;

46
00:03:01,620 --> 00:03:05,400
このためには内部関数を返さなければならず、外部関数を呼び出してすぐに内部関数を呼び出すか、内部関数の結果を変数に格納し、後で一般的に呼び出すことができます。

47
00:03:05,970 --> 00:03:07,520
すばやく試してみましょう。

48
00:03:07,680 --> 00:03:15,540
これらの関数のいずれかに1秒間クロージャーパズルビデオが含まれているかどうかを調べることができるかどうかを確認してください。

49
00:03:15,750 --> 00:03:19,740
さて、この最初の機能で何を思いつきましたか？

50
00:03:19,740 --> 00:03:25,410
内部関数は、返された外部関数で見つける変数を使用していないことがわかります。

51
00:03:25,410 --> 00:03:26,400
&nbsp;

52
00:03:26,550 --> 00:03:31,320
だから、ここのこの1つは、2番目の例ではクロージャを含んでいません。

53
00:03:31,320 --> 00:03:36,900
内部関数は、内部関数が呼び出されるまでに返された外部関数で定義されたdataという変数を使用していることがわかります。

54
00:03:36,900 --> 00:03:41,610
&nbsp;

55
00:03:42,030 --> 00:03:47,980
だから最初のものはないが、2番目のものは常にクロージャの定義に戻る。

56
00:03:48,150 --> 00:03:54,030
また、内部関数が外部関数で変数を使用していないことがわかっている場合は、おそらくクロージャではありません。

57
00:03:54,090 --> 00:03:56,650
&nbsp;

58
00:03:56,820 --> 00:03:58,520
だからいつあなたはクロージャーを使用しますか？

59
00:03:58,920 --> 00:04:04,200
クロージャの大きなユースケースは、他の言語でのプライベート変数の考え方を作成することです。

60
00:04:04,200 --> 00:04:08,640
私たちが私用変数と呼ぶ外部では変更できない変数がサポートされていますが、javascriptにはそれが組み込まれていません。

61
00:04:08,790 --> 00:04:11,520
&nbsp;

62
00:04:11,520 --> 00:04:13,780
ありがたいことに閉鎖が私たちを助けることができます。

63
00:04:13,800 --> 00:04:18,810
&nbsp;

64
00:04:18,810 --> 00:04:23,960
そこで、プレスコマンドオプションJaganのchrome開発ツールのこの例を見て、それを開いて、counterと呼ばれる関数をこの関数の中に書くつもりです。

65
00:04:23,970 --> 00:04:30,000
私はcountと呼ばれる変数を作るつもりですので、ゼロに等しく、このカウンタ関数の中で私は新しい関数を返すつもりです。

66
00:04:30,090 --> 00:04:32,290
&nbsp;

67
00:04:32,340 --> 00:04:35,460
ここに私はこの機能に名前をつけていないという通知はありません。

68
00:04:35,460 --> 00:04:38,360
これは、これらの関数が匿名であるためです。

69
00:04:38,490 --> 00:04:45,100
だから私はこの関数の名前を付けたいと思っていますが、これは何かを数えるように呼び出すことができますが、私はそうする必要はありません。

70
00:04:45,210 --> 00:04:50,230
そして、この内部関数の中で私はプラスプラスの数を返します。

71
00:04:50,250 --> 00:04:55,380
プレフィックス演算子として私がplus

72
00:04:55,380 --> 00:04:58,280
plusをやっている理由は、最初に私がそれを1になるようにするためです。

73
00:04:58,290 --> 00:05:04,500
今私はこのカウンター関数をCと呼ばれる変数と等しくなるように設定することができ、私はR

74
00:05:04,530 --> 00:05:07,010
Cがカウンターと等しいことを保存します。

75
00:05:07,020 --> 00:05:10,130
今私はそれを見て、Cがどんなものになると思いますか？

76
00:05:10,800 --> 00:05:12,230
まあ私は以前に見たように。

77
00:05:12,300 --> 00:05:19,440
それは関数の定義になります。私がCをもう一度呼び出すと、1だけカウントが返されます。

78
00:05:19,590 --> 00:05:20,600
&nbsp;

79
00:05:20,670 --> 00:05:23,060
それを何度も繰り返してみましょう。

80
00:05:23,220 --> 00:05:29,790
しかし、これについて本当にうれしいのは、誰も私が現在行っている範囲で変数数にアクセスすることができないということです。

81
00:05:29,790 --> 00:05:30,920
&nbsp;

82
00:05:31,050 --> 00:05:35,230
カウントにアクセスしようとすると、カウントが定義されていないと言って参照を取得しようとしています。

83
00:05:35,370 --> 00:05:41,040
そしてcountは私的な変数なので誰も来なくてもカウントの値は常にゼロになるはずです。

84
00:05:41,040 --> 00:05:43,360
&nbsp;

85
00:05:43,440 --> 00:05:46,810
ビデオを一時停止し、この例をクロムコンソールにコピーしてみてください。

86
00:05:46,910 --> 00:05:50,210
クロージャがどのように機能するかを理解することで多くの助けになります。

87
00:05:50,880 --> 00:05:56,780
このクラスルーム関数内のプライベート変数の別の例を見てみましょう。

88
00:05:56,790 --> 00:06:01,770
インストラクターと呼ばれる変数は、LPと呼ばれる2つの文字列の配列です。

89
00:06:01,830 --> 00:06:06,240
このクラスルーム関数は、2つの関数を持つオブジェクトを返します。

90
00:06:06,450 --> 00:06:13,320
インストラクターとインストラクターを取得インストラクターを取得するインストラクターに混乱して表示することを可能にするのは、パラメーターを取り込んでインストラクターのアレイに追加する機能です。

91
00:06:13,410 --> 00:06:18,500
&nbsp;

92
00:06:18,570 --> 00:06:20,960
それでここで閉鎖がどこに起こっているのですか？

93
00:06:21,180 --> 00:06:24,640
GETインストラクターがインストラクターの機能を追加することに注意してください。

94
00:06:24,720 --> 00:06:31,860
両方とも、ここでこの関数の外にあるこのインストラクターの変数とこの関数を使用します。

95
00:06:31,860 --> 00:06:33,060
&nbsp;

96
00:06:33,060 --> 00:06:40,320
したがって、これらの2つの関数はインストラクタを取得し、インストラクタを追加すると、既に返された外部関数で定義された変数が使用されます。

97
00:06:40,680 --> 00:06:42,750
&nbsp;

98
00:06:42,750 --> 00:06:48,750
あなたはインストラクターが私にEllen

99
00:06:48,870 --> 00:06:52,250
coltの配列をプリントアウトさせることができるようになっています。インストラクターはそのアレイにインストラクターを加えて理論を返します。

100
00:06:52,620 --> 00:06:58,470
しかし、私が別の変数を使って新しい教室を作ったとき、私はインストラクターを得て、イアンはここにいないことがわかります。

101
00:06:58,470 --> 00:06:59,920
&nbsp;

102
00:07:00,000 --> 00:07:06,810
最後に、closureを使用して、講師にここでプライベート変数を変更させました。

103
00:07:06,810 --> 00:07:12,990
誰もそれを変更することはできませんので、いつでも教室が作成され、インストラクターは常に路地と呼ばれることになります。

104
00:07:12,990 --> 00:07:14,530
&nbsp;

105
00:07:14,760 --> 00:07:19,380
&nbsp;

106
00:07:19,680 --> 00:07:24,440
だから、ちょっとしたことで私たちと付き合っているように見えますが、ここでは小さな例がありますが、多くのツールや技術がクローズをかなり活用して学ぶでしょう。

107
00:07:24,540 --> 00:07:28,560
だから、あなたがそのコードのいくつかを見ているときに、そのクロージャがどこにあるのかを知ることができるかどうか調べてみてください。

108
00:07:28,560 --> 00:07:29,050
&nbsp;

109
00:07:29,250 --> 00:07:31,680
あなたにも同様に指摘してください。

110
00:07:31,680 --> 00:07:32,830
では、私たちは何を学びますか？

111
00:07:32,850 --> 00:07:38,550
内部関数がすでに返された外部関数で宣言された変数を使用し、クロージャが存在しない場合、クロージャが存在します。

112
00:07:38,550 --> 00:07:41,480
&nbsp;

113
00:07:41,490 --> 00:07:47,250
&nbsp;

114
00:07:47,310 --> 00:07:52,980
&nbsp;

115
00:07:52,980 --> 00:07:56,770
内部関数を返さず、その内部関数が外部関数から返される変数を使用しない場合は、クロージャを使用してプライベート変数を作成し、ロジックとアプリケーションを分離するためのより良いコードを書くこともできます。

116
00:07:57,690 --> 00:07:58,830
それは閉鎖のためのものです。

117
00:07:58,830 --> 00:07:59,710
次のビデオで会いましょう
