最終更新:2022-12-26 (月) 10:43:50 (478d)
JavaScript/アロー関数
Top / JavaScript / アロー関数
JavaScript/関数式より短い構文
=>
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions
2つの理由からアロー関数が導入された
関数を短く書きたい
thisを束縛したくない
- JavaScript/thisの内容は呼び出している場所によって変わる
- アロー関数自身はthisを持たず、レキシカルスコープのthis値を使う
- スコープに this 値がない場合、その一つ外側のスコープで this 値を探す
構文
(param1, param2, …, paramN) => { statements } (param1, param2, …, paramN) => expression // 右と等価: (param1, param2, …, paramN) => { return expression; } // 引数が 1 個だけの場合、丸括弧 () は任意です: (singleParam) => { statements } singleParam => { statements } // 引数がない場合、丸括弧を書くべきです: () => { statements }
複数行
{ }
- で囲う、returnは省略不可能
無名関数の省略記法
以前
var fn = function (a, b) { }
ES2015
var fn = (a, b) => { }
特徴
- 名前を付けることができない(常に匿名関数)
- thisが静的に決定する
- functionキーワードに比べて短く書くことができる
- newできない(コンストラクタ関数ではない)
- argumentsを持たない
省略
- 引数が一つの時には「()」を省略できる
- 関数bodyが1つのreturn文の時はブロックと「return」を省略できる。
[1, 2, 3].map( function (v) { return v * v } ) // [1, 4, 9]
[1, 2, 3].map( v => v * v ) // [1, 4, 9]
- 下記のような場合もreturnを省略可能
v => { name: "aaa", age: 123, }
this
- 「this」は関数が定義されたスコープでのthisをそのまま指す。
対応
参考
- http://js-next.hatenablog.com/entry/2014/07/23/173147
- https://asciidwango.github.io/js-primer/basic/function-this/
- https://www.i-ryo.com/entry/2020/02/18/063604