【あろーかんすう】

アロー関数 とは?

最終更新:
💡 短い式をすっきり書ける、矢印の関数

「=>」を使って関数を表すJavaScriptの構文。短い式を返す関数を簡潔に書ける。独自のthisやargumentsを持たず、必要なら外側のスコープのものを参照する。

📌 このページのポイント
アロー関数:式を短く表す 通常の関数式 function (x) { return x * 2; } アロー関数 x => x * 2 式の値を返す 波括弧を使うなら return を書く x => { return x * 2; } 行数ではなく「式かブロックか」 this は外側を参照 / new には使えない
例はどちらも引数を2倍にします。thisやargumentsの扱いは同じではありません。
ひよこ ひよこ
アロー関数は、普通の関数を短くしただけ?
ペンギン先生 ペンギン先生
短く書けるけれど、動作の違いもあるよ。たとえば「function (x) { return x * 2; }」は、同じ計算をする「x => x * 2」と書ける。mapで配列の各値を2倍にするときなどに便利なんだ。
ひよこ ひよこ
1行ならreturnを省略できるの?
ペンギン先生 ペンギン先生
行数ではなく、本体が単一の式かどうかだよ。「x => x * 2」は式の値を返す。「x => { x * 2; }」はブロックなので、returnがなく値はundefinedになる。値を返すなら「x => { return x * 2; }」と書くんだ。
ひよこ ひよこ
引数の括弧はいつ省ける?
ペンギン先生 ペンギン先生
単純な引数名が一つなら省けるよ。引数がゼロや複数の場合、デフォルト値や分割代入などを使う場合は括弧が必要。オブジェクトを式として返すなら「() => ({ ok: true })」のように、オブジェクトも括弧で囲むんだ。
ひよこ ひよこ
thisはどう違うの?
ペンギン先生 ペンギン先生
通常の関数のthisは呼び出し方などで決まるけれど、アロー関数は独自のthisを持たず外側のものを参照するよ。メソッド内のコールバックで便利だね。ただし、オブジェクトに置いたアロー関数が、そのオブジェクトをthisにするわけではないんだ。
ひよこ ひよこ
argumentsやnewは使える?
ペンギン先生 ペンギン先生
独自のargumentsはないけれど、外側にあれば参照できるよ。自分の引数をまとめたいなら「(...args) => args.length」のような残余引数が使える。newでインスタンスを作るコンストラクターにはできないので、普通の関数やクラスと使い分けよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アロー関数」って出てきたら「矢印で簡潔に書けて、外側のthisを使うJavaScriptの関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「arrow function」 = 矢印関数
💬 arrowは「矢印」。構文に使う「=>」の形と結び付けると覚えやすいよ。

参考資料

← 用語集にもどる