[JS]一級関数と高次関数


#評価と一級


評価


計算コードによる値の作成

一級


価格
const a = 10;
  • 変数に入れることができます.
  • const add10 = a => a + 10;
  • 関数の因子として使用できます.
  • const r = add10(a);
  • 関数の結果(戻り値)として使用できます.
  • log(r); //20

    #一級関数


    JavaScriptでは、関数は1レベルです.
    すなわち,JS関数は組合せ性と抽象化のツールである.
  • 関数は付与可能です.
  • 関数の結果値として関数を使用できます.
  • 関数は他の変数に含めることができます.
  • 必要に応じて評価を行い結果を生成することができる.
  • const add5 = a => a + 5;
    log(add5); //a => a + 5
    log(add5(5)); //10
    
    const f1 = () => () => 1;
    log(f1()); //() => 1
    
    const f2 = f1();
    log(f2); //() => 1
    log(f2()); //1

    #高次関数


    関数を値とする関数.
    関数を値として使用すると、関数がパラメータまたは戻り値として使用されることを意味します.

    1.受信関数をパラメータとして実行する関数

  • apply1
  • const apply1 = f => f(1);
    const add2 = a => a + 2;
    log(apply1(add2)); //3
    log(apply1(a => a - 1)); //0
  • times
  • const times = (f, n) => {
      let i = -1;
      while (++i < n) f(i);
    }
    
    times(log, 3); // 0 1 2
    times(a => log(a + 10), 3); // 10 11 12

    2.関数を作成して返される関数(モジュールを作成して返される関数)

  • addMaker:a記憶関数エンクロージャを作成(b ⇒ a + b)リターンする関数
  • const addMaker = a => b => a + b;
    const add10 = addMaker(10);  // -> add10에 b => 10 + b 함수 대입
    log(add10(5)); //15
    log(add10(10)); //20