teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

もう少し詳細に

2018/11/27 03:31

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -1,4 +1,5 @@
1
1
  [アロー関数 - MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
2
+ この記事の1行目に注目してください。
2
3
 
3
4
  > アロー関数式 は、その名のとおり矢印を使って記述し、function 式より短い構文で同様な内容を記述することができます。なおthis, arguments, super, new.target を束縛しません。また、アロー関数式は、メソッドでない関数に最適で、コンストラクタとして使うことはできません。
4
5
 
@@ -6,9 +7,15 @@
6
7
 
7
8
  > なお`this`, arguments, super, new.target を束縛しません。
8
9
 
10
+ という訳で「アロー関数」はラムダとか無名関数的な役割が強い存在です。
11
+ thisを作って束縛しないから、非同期のコールバック関数やPromiseのthenに投げ込む用途として使い勝手が良い存在に仕上がっています。
12
+ 従ってこれからのプログラミングに`let self = this`という行は必要ありません。
13
+
14
+ デメリットを考えると、thisやarguments作ってくれないので、
15
+ ニッチな需要が満たせず普通の無名関数`function () {}`の完全上位互換ではないんですね。
16
+ 適切に使い分けてください。
17
+
9
18
  そもそも、ES6以降はクラスとインスタンス使う代わりに
10
19
  thisに依存したプログラミングするなという思想なので、
11
20
  適切にクラスベースのオブジェクト指向に移行していけば滅多に困る事はありません。
12
-
13
- そもそもなんでselfを返してるのと思ったら、prototypeにぶら下げる関数作ってるんですね。
14
21
  クラスベースに置き換えるか、そのまま行くなら一番お外の`function`宣言はアロー関数に置き換え不可能でそのまま使うかの二択です。