アロー関数について

通常の関数

最も基本的な関数の定義方法

function sayHello(name) {
  console.log("Hello, " + name + "!");
}

関数式

関数式は、関数を変数に代入する方法で関数を定義。

const sayGoodbye = function(name) {
  console.log("Goodbye, " + name + "!");
};

アロー関数

アロー関数は、ES6(ECMAScript 2015)で導入された。
短い関数を簡潔に記述するケースや、this キーワードのスコープに関連する問題を解決するのに有用。
最も単純な形では、アロー関数は以下のようになる。

const add = (a, b) => a + b;

この関数は、ab の2つの引数を受け取り、それらを足して返します。

複数の命令を含む関数の場合は、中括弧 {}return ステートメントを使用します。

const calculate = (a, b) => {
  const sum = a + b;
  const diff = a - b;
  return { sum, diff };
};

引数が一つの場合

引数が一つしかない場合は、括弧を省略できる。

const double = x => x * 2;

引数がない場合

引数がない場合、空の括弧 () を使う。

const getRandom = () => Math.random();

this の挙動

アロー関数内の this は、関数が定義された時点での this の値を「覚え」る。
一方で、通常の関数では this の値が動的に変わることがある。

const obj = {
  value: 42,
  createArrowFn: function() {
    return () => this.value;
  },
};

const arrowFn = obj.createArrowFn();
console.log(arrowFn());  // 42

createArrowFn メソッドがアロー関数を返している。
このアロー関数は createArrowFn が呼び出された時点での this.value、つまり obj.value を返す。

制限と注意点

  • arguments オブジェクトがない。
  • yield キーワードが使えないので、ジェネレータ関数として使えない。
  • super キーワードも同様に使えない。
  • コンストラクタとして使用できません。すなわち、new キーワードを使ってインスタンスを生成することはできない。