「関数リテラル」とは?
アプリ開発者が、ユーザー定義の関数を作成する方法の一つです。
関数自体は、JavaScriptにおいては、データ型の一種となり、文字列や数値のように、リテラルとして宣言することができます。
関数リテラルの記法について
関数リテラルは、下記のように、名前のない関数をを定義した上で、変数に代入して使用します。
1 2 |
var 変数名 = function(引数){ }; |
関数リテラルは名前がないので、匿名関数や、無名関数と呼ばれることもあります。
「関数リテラル」のメリット
関数の名前を考える手間を省ける。
高階関数を使う際に、主にコードの可読性を上げるという点で非常に重宝する記述方法になります。
詳しくは、下記の記事でも解説していますので、合わせてご覧下さい。
JavaScriptの外部ライブラリを読み解く際にも、かなり有用な知識になるので、「関数リテラル」に関してはしっかり理解をしましょう。
即時関数とは?
その名の通り「即時に実行される関数」のこと。匿名関数の一種ですが、匿名関数と違って変数に関数を代入せずそのまま使います。
メリット
スコープの汚染を防ぐため。
JavaScriptの変数のスコープは、「グローバルスコープ」と「関数スコープ」の二つです。関数の中で変数を定義すると関数の外側の変数を不用意に上書きしてしまうことがなくなります。
基本的にプログラムが大きくなるにつれてグローバル変数が不要な変数で埋め尽くされていきます。
構文
1 2 3 |
const result(戻り値) = (function(引数1,引数2) { ... }(引数1,引数2)); |
注意点
あくまで使い捨て用途で使うこと
再利用がされない使い捨ての処理の場合に使います。もし、再利用したい場合は名前付き関数を定義するようにしましょう。
少し分かりづらい
文法の特性上、カッコが増えてしまうのでもし戻り値が二つまでの関数であれば三項演算子で代替できないかは検討しても良いかもしれません。
1 2 3 4 |
const result(戻り値) = (function(引数1) { if (条件1) return xxx; return yyy; }(引数)); |
例えば上記のようなサンプルであれば以下のように書き換えてもっと簡潔に書けます。
1 |
const result(戻り値) = 条件1 ? xxx : yyy; |
なので使い所としては、戻り値が3つ以上発生している(もしくは3つ以上発生する可能性がある場合に限定するべきでしょう。)
この記事へのコメントはありません。