回答編集履歴

1

おまけ

2023/08/04 06:08

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36626

test CHANGED
@@ -16,3 +16,19 @@
16
16
  ①fn3はコールバックが`function`のため、`window`に束縛します。fn2はアロー関数のため、`setTimeout`のコールバックであっても束縛をせずに、`this`は`person`のままなのがエラーにならない理由です。
17
17
 
18
18
  ②その説明はクラスの話かと思いますので話がズレます。アロー関数は何があろうと`this`を束縛しないため、クラスのメソッドに使っても`this`をインスタンスに束縛をしません。
19
+
20
+ ---
21
+
22
+ おまけ。質問コードに続いて以下を実行するとこのような結果になります。
23
+ ```js
24
+ const f = person.fn4;
25
+ f(); // error
26
+
27
+ const obj = { fn1: console.log };
28
+ obj.fn4 = person.fn4;
29
+ obj.fn4(); // ""
30
+
31
+ const obj2 = { fn1: () => console.log(this) };
32
+ obj2.fn4 = person.fn4;
33
+ obj2.fn4(); // window
34
+ ```