この記事は、JavaScriptのアロー関数について学習した内容をまとめた、自分用のメモです。誤りなどありましたら、ご指摘いただけますと幸いです。
アロー関数とは
アロー関数とは従来のfunction
キーワードを使った関数式をより短く、直感的に描くためのJavaScriptの構文である。ES2015(ES6)から導入された。
名前の通り、=>
(アロー)記号を使って関数を定義するのが特徴
基本的な書き方
従来の書き方
const add = function(a, b) {
return a + b;
};
アロー関数の書き方
const add = (a, b) => {
return a + b;
};
省略ルール
アロー関数には、さらにコードを短くするための省略ルールがある。
1.処理が単一の式で、その結果を返すだけの場合{}
とreturn
を省略できる。
//上記のadd関数はここまで短くすることができる
const add = (a, b) => a + b;
2.引数が1つの場合()
を省略できる
const double = (x) => x * 2;
//上のように()の引数が1つ場合以下のように省略できる
const double = x => x * 2;
3.引数がない場合は()
を省略できない
const sayHello = () => 'Hello';
最大の特徴: this
の扱い
アロー関数のもっとも重要な特徴は、this
が指すものが従来の関数と異なる点
・従来
this
はその関数がどのように呼び出されたかによって決まる。これにより、意図しないものをthis
が指してしまうことがある。
・アロー関数
this
は、その関数がどこで定義されたかによって静的にきまる。つまり、アロー関数が書かれた場所のthis
をそのまま引き継ぐ(これをレキシカルスコープのthis
と呼ぶらしい)
具体例
オブジェクトのメソッド内でsetTimeout
を使う場合によく違いが現れる.
const user = {
name: '仙河',
greetAfterWait: function() {
// 従来のfunctionだと、一秒後には'this'が'user'オブジェクトを指さなくなる
setTimeout(function() {
// この中では、'this'は'window'オブジェクトを指すため、'this.name'はundefinedになる
console.log(`従来の関数: こんにちは、${this.name}さん`);
}, 1000);
// アロー関数だと、外側のthis(userオブジェクト)を引き継ぐ
setTime(() => {
// この中のthisはuserオブジェクトを指す
console.log(`アロー関数: こんにちは、${this.name}さん`);
}, 1000);
}
};
user.greetAfterWait();
// 出力結果:
// 従来の関数: こんにちは、さん
// アロー関数: こんにちは、仙河さん
このようにアロー関数を使うとthis
の挙動が直感的になり、const self = this;
や.bind(this)
のような工夫が不要になる。