JavaScript: 高階関数
高階関数とは、引数が関数、もしくは戻り値が関数である関数のことです。
高階関数は関数型プログラミングでよく使われます。
関数の引数に指定できたり、関数の戻り値として指定できるオブジェクトのことを 第一級オブジェクトといいます。 関数が第一級オブジェクトである言語では、関数型プログラミングが可能となります。
JavaScript では関数が第一級オブジェクトですから、関数型プログラミングができます。
サンプルプログラム(処理時間を計測する)
次の関数 timeWatch() は、処理時間を計測する関数です。引数として関数を受け取り、 受け取った関数の処理時間を計測します。 このプログラムでは関数 func() を引数として受け取っています。
// 関数の処理時間を計測する関数
function timeWatch(f){
var startTime = new Date(); // 開始
f(); // 関数実行
var endTime = new Date(); // 終了
var diff = endTime - startTime;
return diff;
}
// 計測対象の関数
function func(){
for (var i = 0; i < 100000000; i++){
;
}
}
// 計測
console.log(timeWatch(func)); // 例) 135 ミリ秒単位
上のプログラムでは関数 func() を関数宣言文として別に定義していますので
次のような呼び出しになっています。
console.log(timeWatch(func));
関数 func() の部分を関数宣言文ではなく、無名関数(関数リテラル)で記述する場合は、
次のようになります。
// 関数の処理時間を計測する関数
function timeWatch(f){
var startTime = new Date(); // 開始
f(); // 関数実行
var endTime = new Date(); // 終了
var diff = endTime - startTime;
return diff;
}
// 計測(無名関数)
console.log(timeWatch(function(){
for (var i = 0; i < 100000000; i++){
;
}
}));