JavaScript アロー関数

ES6でアロー関数が導入されました。

アロー関数はより短い関数を書くことを可能にします:

文法

let myFunction = (a, b) => a * b;

実際に試してみてください

以前:

hello = function() {
  return "Hello World!";
}

実際に試してみてください

アロー関数を使用した後:

hello = () => {
  return "Hello World!";
}

実際に試してみてください

本当に短くなりました!関数が一つの文しかない場合で、その文が値を返す場合、括弧と return キーワード:

アロー関数のデフォルトの返却値:

hello = () => "Hello World!";

実際に試してみてください

注釈:これは関数が一つの文しかない場合にのみ有効です。

パラメータがある場合、それらを括弧内に渡します:

パラメータ付きのアロー関数:

hello = (val) => "Hello " + val;

実際に試してみてください

実際には、一つのパラメータしかない場合、括弧を省略することもできます:

括弧なしのアロー関数:

hello = val => "Hello " + val;

実際に試してみてください

これは どうすればいいのでしょうか?

標準関数と比較して、アロー関数は これは の処理も異なります。

簡潔に言えば、アロー関数を使用する際には、 これは のバインディングです。

標準関数において、キーワード これは 呼び出す関数のオブジェクトを表し、それはウィンドウ、ドキュメント、ボタン、その他の何でもできます。

アロー関数において、これは キーワードは常にアロー関数を定義するオブジェクトを表します。

これらの違いを理解するために二つの例を見てみましょう。

これらの例はどちらも二度方法を呼び出しています、一つはページが読み込まれたとき、もう一つはユーザーがボタンをクリックしたときです。

最初の例は標準関数を使用し、二つ目の例はアロー関数を使用しています。

結果は、最初の例では二つの異なるオブジェクト(windowとbutton)が返され、二つ目の例ではwindowオブジェクトが二度返される理由は、windowオブジェクトが関数の「所有者」だからです。

標準関数において、thisはその関数を呼び出すオブジェクトを表します:

// 標準関数:
hello = function() {
  document.getElementById("demo").innerHTML += this;
}
// ウィンドウオブジェクトがこの関数を呼び出します:
window.addEventListener("load", hello);
// ボタンオブジェクトがこの関数を呼び出します:
document.getElementById("btn").addEventListener("click", hello);

実際に試してみてください

アロー関数を使用すると これは 関数の所有者を示します:

// 矢印関数:
hello = () => {
  document.getElementById("demo").innerHTML += this;
}
// ウィンドウオブジェクトがこの関数を呼び出します:
window.addEventListener("load", hello);
// ボタンオブジェクトがこの関数を呼び出します:
document.getElementById("btn").addEventListener("click", hello);

実際に試してみてください

関数を使用する際には、これらの違いを覚えておいてください。時には、通常の関数の動作が望ましい場合がありますが、そうでない場合は、矢印関数を使用してください。

ブラウザのサポート

以下の表は、最初に完全に JavaScript 矢印関数をサポートするブラウザのバージョンを示しています:

Chrome IE Firefox Safari Opera
Chrome 45 Edge 12 Firefox 22 Safari 10 Opera 32
2015 年 9 月 2015 年 7 月 2013 年 5 月 2016 年 9 月 2015 年 9 月