高階関数とは、次のうち少なくとも一方を行う関数です。すなわち関数を引数として受け取るか、関数を返すかです。これが可能なのは、JS では関数が第一級の値だからです(他の値と同じように受け渡しできます)。
関数を受け取る
js
[, , ].( n * );
button.(, handler);
( (), );
高階関数とは、次のうち少なくとも一方を行う関数です。すなわち関数を引数として受け取るか、関数を返すかです。これが可能なのは、JS では関数が第一級の値だからです(他の値と同じように受け渡しできます)。
[, , ].( n * );
button.(, handler);
( (), );
function multiplier(factor) {
return n => n * factor; // returns a function that remembers `factor`
}
const double = multiplier(2);
const triple = multiplier(3);
double(5); // 10
triple(5); // 15
ここで multiplier は汎用的な関数から特化した関数を作り出します。クロージャが factor を取り込んでいます。
function withLogging(fn) {
return (...args) => {
console.log(`calling with`, args);
const result = fn(...args);
console.log(`result`, result);
return result;
};
}
const loggedAdd = withLogging((a, b) => a + b);
高階関数はコードを宣言的で再利用可能にします。
配列メソッド(map/filter/reduce)、イベント処理、ミドルウェア、デコレータ、カリー化、React のパターン(HOC、カスタムフック)の土台となっています。
同じループのロジックを繰り返し書く代わりに、振る舞いを関数として渡せます。