アロー関数
2019/03/01
アロー関数の書き方
アロー関数ではES6で追加された書き方で矢印のように記述してfunctionより短い構文で記述することができます
//2つの数字を足す関数
//function
const add = function (a, b) {
return a + b;
};
//アロー関数
const add = (a, b) => {
return a + b;
}
アロー関数を省略して書く
関数のBody部分が1つしかない場合returnを省略できます
const add = (a, b) => a + b;
引数が1つの場合は()を省略できます
//2倍にする関数
const double = (number) => 2 * number;
↓
const double = number => 2 * number;
配列の数字を2倍にして返す関数をfunctionとアロー関数で書いてみます
functionでは
const numbers = [10,20,30];
const doubleNumbers = numbers.map(function (number) {
return 2 * number;
});
アロー関数では、引数が1つで関数のbody部分も1つなのでfunctionと比べてここまで短く書くことができます
const doubleNumbers = numbers.map(number => 2 * number);
アロー関数はthisを束縛しない
以下のコードを実行してみます
const team = {
members: ['太郎', '花子'],
teamName: '赤チーム',
teamSummary: function () {
return this.members.map(function (member) {
return `${member}は${this.teamName}の所属です。`;
});
}
};
console.log(team.teamSummary);
理想とされる実行結果は以下ですが、
太郎は赤チームの所属です。
花子は赤チームの所属です。
実際は
Uncaught TypeError: Cannot read property 'teamName' of undefined
となってしまいます
なぜこうなってしまうかというとコールバック関数members.mapはteamとは別のところで実行されているため、
thisでteamを参照することができないためです
これをアロー関数で書いてみます
const team = {
members: ['太郎', '花子'],
teamName: '赤チーム',
teamSummary: function () {
return this.members.map(member => `${member}は${this.teamName}の所属です。`);
}
};
console.log(team.teamSummary);
するとなぜかちゃんと
太郎は赤チームの所属です。
花子は赤チームの所属です。
と表示することができます
これはアロー関数は書く場所によってthisが決まるためです
アロー関数で書くことによって本来参照したいところのthisを参照することができます