「関数リテラル(無名関数)」と「アロー関数」は見た目が似ていますが、いくつか大事な違いがあります。初心者向けに整理してみましょう。
書き方の違い
| 種類 | 書き方 | 例 |
|---|---|---|
| 関数リテラル(無名関数) | let f = function(a, b){ return a + b; }; | f(2,3) // → 5 |
| アロー関数 | let f = (a, b) => a + b; | f(2,3) // → 5 |
👉 アロー関数は「短く書ける」のが最大の特徴。
主な違い
- 1. 記述の簡略化
- 関数リテラルは
functionキーワード必須アロー関数は=>を使い、1行なら{}やreturnを省略できる
- 関数リテラルは
// 関数リテラル
let square = function(x){
return x * x;
};
// アロー関数
let square = x => x * x;
JavaScript- 2. this の扱い
- 関数リテラル:呼び出し方によって
thisが変わるアロー関数:外側のスコープのthisを引き継ぐ(=自分ではthisを持たない)
- 関数リテラル:呼び出し方によって
let obj = {
value: 10,
normalFunc: function(){
console.log(this.value); // → 10
},
arrowFunc: () => {
console.log(this.value); // → undefined(外側のthisを参照)
}
};
obj.normalFunc();
obj.arrowFunc();
JavaScript👉 イベント処理やオブジェクトのメソッドでは、この違いが重要になります。
- 3. コンストラクタとして使えるか
- 関数リテラル:
newを使ってオブジェクトを作れるアロー関数:コンストラクタには使えない
- 関数リテラル:
let Person = function(name){
this.name = name;
};
let p = new Person("Taro"); // OK
let PersonArrow = (name) => { this.name = name; };
let p2 = new PersonArrow("Taro"); // エラー!
JavaScriptまとめ
- 関数リテラル
- 伝統的な書き方
thisが呼び出し方で変わる- コンストラクタとして使える
- アロー関数
- 簡潔に書ける
thisを外側から引き継ぐ- コンストラクタには使えない
💡 初心者へのおすすめ:
- 普段はアロー関数でOK(短く書けるし、
thisの混乱も少ない) - オブジェクトのメソッドやコンストラクタを作るときは関数リテラルを使う
