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++){
        ;
    }
}));

JavaScript入門