1
00:00:00,570 --> 00:00:03,970
さて、これをキーワードにして何が起こったのかを見てみましょう。

2
00:00:04,170 --> 00:00:06,980
ここでは、最初のコードブロックで楽しいものが得られます。

3
00:00:07,020 --> 00:00:12,810
Say

4
00:00:12,810 --> 00:00:17,740
hiというメソッドがあります。これは、設定されたタイムアウトを呼び出し、キーワードのファーストネームプロパティの値に連結された文字列を取り消したログをキャンセルする関数です。

5
00:00:17,820 --> 00:00:21,100
これは、このコードが何を返すのかを見る前に、これです。

6
00:00:21,150 --> 00:00:24,740
ビデオを一時停止し、このキーワードが何を指しているのか考えてみてください。

7
00:00:24,780 --> 00:00:28,550
最初の2つのルールに戻ると、これはグローバルなコンテキストのキーワードです。

8
00:00:28,710 --> 00:00:32,280
あるいは、宣言されたオブジェクトの中のキーワードです。

9
00:00:32,280 --> 00:00:36,480
宣言されたオブジェクトの内部にあると思っているかもしれませんが、あなたは正しいです。

10
00:00:36,750 --> 00:00:42,960
しかし、set timeoutは後の時点で呼び出されるため、キーワードthisは親オブジェクトを参照しません。

11
00:00:42,960 --> 00:00:44,310
&nbsp;

12
00:00:44,310 --> 00:00:47,100
実際にはグローバルオブジェクトを参照します。

13
00:00:47,100 --> 00:00:50,060
これは非常に扱いにくいもので、初心者がたくさんいます。

14
00:00:50,160 --> 00:00:55,470
それで、設定されたタイムアウトが後の時点で呼び出されたので、もう一度それを見てみましょう。

15
00:00:55,590 --> 00:01:01,350
&nbsp;

16
00:01:01,350 --> 00:01:07,920
それが接続されているオブジェクトは実際にはウィンドウと同じです。設定されたタイムアウトは、関数が実行されるコンテキストが実際にグローバルであると宣言されたときに、コールドオブジェクトの内部で定義されていますコンテキスト。

17
00:01:07,920 --> 00:01:13,960
&nbsp;

18
00:01:13,980 --> 00:01:18,000
だから、私たちはキーワードの正しい文脈を失っているので、この問題をどのように解決することができます。

19
00:01:18,010 --> 00:01:22,220
これを明示的に設定する必要がありますが、これを参照するキーワードが必要です。

20
00:01:22,590 --> 00:01:27,810
コールと適用を使用してこれを行うことができますが、後でその関数を呼び出す必要があるため、それらのいずれかを使用する必要はありません。

21
00:01:28,260 --> 00:01:30,510
&nbsp;

22
00:01:30,570 --> 00:01:33,600
呼び出しと適用がすぐに関数を呼び出すことを忘れないでください。

23
00:01:33,660 --> 00:01:38,640
そのようにすると、後の時点で関数を実行するための設定されたタイムアウトの目的が無効になります。

24
00:01:38,640 --> 00:01:39,620
&nbsp;

25
00:01:39,960 --> 00:01:46,080
そのため、2番目のコードブロックでバインドされたままになります。バインドメソッドの最初のパラメータとして渡すことで、問題を解決できます。

26
00:01:46,080 --> 00:01:47,700
&nbsp;

27
00:01:47,700 --> 00:01:53,640
thisキーワードを参照するのに必要な値は、thisキーワードを最初のパラメータとして渡す理由について完全に混乱している可能性があります。

28
00:01:53,640 --> 00:01:56,010
&nbsp;

29
00:01:56,160 --> 00:02:01,950
しかし、一歩踏み込んで、コードオブジェクトの中にこのキーワードが何を参照するのかを尋ねてください。

30
00:02:02,850 --> 00:02:06,140
まあ、それは実際にカルトオブジェクト自体を指しています。

31
00:02:06,240 --> 00:02:12,450
&nbsp;

32
00:02:12,450 --> 00:02:18,150
したがって、キーワードの正しい値をバインドしています。これは、バインドメソッドに呼び出された変数に渡すことができるキーワードの代わりに、設定されたタイムアウトの中の関数が呼び出されたときに必要なものです。同じ結果が得られます。

33
00:02:18,150 --> 00:02:20,160
&nbsp;

34
00:02:20,400 --> 00:02:24,790
しかし、より一般的には、キーワードthisを使用するコードが表示されます。

35
00:02:24,900 --> 00:02:30,600
&nbsp;

36
00:02:30,600 --> 00:02:36,300
&nbsp;

37
00:02:36,300 --> 00:02:41,060
要約すると、バインドメソッドはapplyを呼び出すのとは違った関数定義を返し、関数に渡す引数の値がすべてわからないときやキーワードの値を設定するときに非常に便利です非同期コード。

38
00:02:41,070 --> 00:02:42,300
最後の一言

39
00:02:42,390 --> 00:02:44,960
ここで取り上げている資料はかなり進んでいます。

40
00:02:45,150 --> 00:02:48,900
&nbsp;

41
00:02:48,900 --> 00:02:53,910
しかし、もしあなたがプロのjavascript開発者になることを望んでいるのであれば、これは生産コードベースで見ることができるコードの一種であり、この例ではかなり面倒であればインタビューで尋ねられます。

42
00:02:53,910 --> 00:02:54,920
&nbsp;

43
00:02:54,930 --> 00:02:55,710
心配しないでください。

44
00:02:55,830 --> 00:03:00,570
&nbsp;

45
00:03:00,600 --> 00:03:05,580
私はこのトピックをたくさん教えてきました。そして、それは常に最初に人々を混乱させるもので、コードの各行を辿り、何が起きているかを見るためにクロムコンソールに例をタイプするようにしてください。

46
00:03:05,760 --> 00:03:07,950
いつものように、これらの質問を自由に感じる。

47
00:03:07,950 --> 00:03:10,600
私たちはあなたが次のビデオで学ぶのを助けるためにここにいます。

48
00:03:10,740 --> 00:03:15,060
キーワードを決定する最後のルールを簡単に説明します
