1日5分符号化「高次関数」


##高次関数:受信関数をパラメータ(パラメータ)または戻り関数(パラメータに渡される関数をコールバック関数と呼ぶ)

✓パラメータとして他の関数を受け入れる

function double(num) {
  return num * 2;
}
-------------------------
function doubleNum(func, num) { //doubleNum은 다른함수를 인자로 받는 고차함수이다 .func 은 doubleNum의 콜백함수이다.
  let doubledArr = [];
  return func(num);
}
-------------------------
let output = doubleNum(double, 4);//double 은 함수 doubleNum의 콜백 함수이다.
console.log(output); // -> 8

✓関数を返す場合

function adder(added) { //adder는 고차함수
  return function (num) {//익명함수 num을 사용하여 added와 더한 값을 리턴한다.
    return num + added;
  };
}
-------------------------------
let output = adder(5)(3);
console.log(output); //8
-------------------------------
const add3 = adder(3);//adder가 리턴하는 함수를 변수에 저장할수있다
output = add3(2);
console.log(output);

✓関数をパラメータとして受け入れ、関数を返す場合

function double(num) {
  return num * 2;
}
-----------------------------------
function doubleAdder(added, func) { //doubleAdder 는 고차함수다 , func 는 doubleAdder의 콜백함수다.
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}
-----------------------------------
doubleAdder(5, double)(3); // -> 13 //double 은 함수 doubleAdder의 콜백으로 전달되었다.
-----------------------------------
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8