JavaScriptの関数の特徴
- 引数は可変になっていて、いくらでも引数を渡せます。
- 呼び出された関数側では、「arguments」という変数を使って、引数にアクセスします。
上記の特徴から見て分かるとおり、JavaScriptは関数においても制約が非常に緩いです。
関数の引数の特徴
JavaScriptでは、関数側で用意している数と、関数に与える引数の数をチェックしません。
関数に引数を定義しているのに、引数を与えなかった場合
関数内での引数の値は「undefined(未定義)」になります。
関数に引数を定義している数以上の引数を与えた場合
はみ出した引数の値は切り捨てられます。
argumentsオブジェクトについて
argumentsオブジェクトとは?
関数配下のみ利用できる特別なオブジェクトで、関数を呼び出したタイミングで生成されて、呼び出し元から与えられた引数の数を保持します。
argumentsオブジェクトの用途
引数の数のチェックができる。
このオブジェクトを使えばJavaScriptでは、本来チェックできなかった引数の数のチェックもユーザーにて行うことが可能です。
「可変長引数の関数」という機能がある。
「可変長引数の関数」とは、「引数の個数があらかじめ決まっていない関数のこと」です。
引数の数が決まっていないので、プログラムの中で、柔軟にソースを記述することが可能です。
引数のデフォルト値
ECMAScript2015では、引数にデフォルト値を定義できるようになり、従来までのコードと比べると非常にシンプルになりました。
1 2 3 |
function 関数名(引数=デフォルト値){ … } |
デフォルト値が適用されるのが、引数が渡されなかった場合のみとなります。
高階関数とは?
関数をオブジェクトや変数のように扱える仕組みを利用して、「関数を引数、戻り値として扱ったり、変数に代入したりする関数のこと」です。例えば、forEachメソッドは高階関数です。
サンプル
1 2 3 4 5 6 7 8 |
function helloWorld(){ alert("helloWorld"); } function hofTest1(){ var h = helloWorld; h(); } |
上記関数では、別の関数を変数に代入して、メソッドとして実行しています。
メリット
- 引数として渡す関数も色々と変えることができるので、呼び出し先の処理を可変的なものにすることができる点。
- 普通、関数は数値や文字などしか計算対象とならないが関数自体なども計算対象とすることができる点。
高階関数における「引数として与えられる関数」である「コールバック関数」について
高階関数においては、引数で与えられる関数は、「コールバック関数」と呼ばれています。
コールバック関数は下記の記事で解説しています。
コールバック関数は、「その場限り」でしか利用されないことはよくあります。
どうせ使い捨てるのであれば、名前付きの関数よりも、匿名関数(関数リテラル)を利用した方がコードがシンプルになるので、望ましいです。
「関数リテラル」については、下記の記事でも解説しています。
例
1 2 3 4 5 6 7 8 9 10 |
//高階関数 function koukai(func){ var a = "test"; func(a); } //匿名関数 koukai(function(a){ console.log(a); }) |
関数リテラルを使うメリット
- コードが短くなる。
- 関連する処理が一つの文で記述することができるので、呼び出し元のコードと実際の処理をしている関数との関係が分かりやすくなる。
- 使い捨ての関数に対してグローバル変数を使わなくて良いので、名前の重複の可能性も減らせる。
- 世の中の多くのJavaScriptプログラマーが好んで使っている手法なので、外部ライブラリを読み解く際にも有用です。
この記事へのコメントはありません。