一級オブジェクト/高次関数/コールバック関数


First-class object일급객체
  • 無名の文字で表現できます.()
  • 変数または資料構造(オブジェクト、配列など)に割り当てることができます.
  • パラメータとして
  • 関数のパラメータに渡すことができる.
  • の他の関数の戻り値に戻ることができます.
  • 関数と他のオブジェクトを区別する特徴は、呼び出すことができることです.
    関数式
    関数を変数に保存する方法
    関数式は、割り当て前に使用できません.
     square(7); 
     // --> ReferenceError: Can't find variable: square
    
    const square = function (num) {
      return num * num;
    };
    
    // square에 함수가 저장되어 있으므로(일급 객체), 함수 호출 연산자 '()'를 사용할 수 있습니다.
    output = square(7);
    console.log(output); // 49
    「高次関数?」「ボス」
    戻り関数
  • :「ライブラリ関数」
  • とも呼ばれる
    パラメータとして
  • 関数を受け入れることができる関数:コールバック関数を持つ高次関数.
  • 高次関数は、必要に応じてパラメータとして受信した関数を呼び出すか、モジュールを作成して返します.
    高次関数は不変性向けの「関数式プログラミング」
    「関数プログラミング」は、純粋な関数と補助関数の組み合わせであり、論理的な条件文と重複文を排除することで複雑さを解決し、変数の使用を減らし、副作用を回避するプログラミングモードである.
    特にArrayオブジェクトは非常に有用な高次関数を提供する.
    API
    this(元の配列)の変更方法
    .sort()ソート
    配列内の要素を一時的に文字列に変換し、ソートします.
    const fruits = ['Banana', 'Orange', 'Apple'];
    
    // ascending(오름차순)
    fruits.sort();
    console.log(fruits); // [ 'Apple', 'Banana', 'Orange' ]
    
    // descending(내림차순)
    fruits.reverse();
    console.log(fruits); // [ 'Orange', 'Banana', 'Apple' ]
    数字を並べ替えるとき?
    ソート順を定義する比較関数をメソッドのパラメータとして渡す
    const points = [40, 100, 1, 5, 2, 25, 10];
    
    // 숫자 배열 오름차순 정렬
    // 비교 함수의 반환값이 0보다 작은 경우, a를 우선하여 정렬한다.
    points.sort((a, b) => a - b);
    console.log(points); // [ 1, 2, 5, 10, 25, 40, 100 ]
    
    // 숫자 배열의 최소값 취득
    console.log(points[0]); // 1
    
    // 숫자 배열 내림차순 정렬
    // 비교 함수의 반환값이 0보다 큰 경우, b를 우선하여 정렬한다.
    points.sort((a, b) => b - a);
    console.log(points); // [ 100, 40, 25, 10, 5, 2, 1 ]
    
    // 숫자 배열의 최대값 취득
    console.log(points[0]); // 100
    this(元の配列)を変更しない方法
    繰り返し.foreach
  • はドアの代わりに使用できます.
  • 配列を巡回し、各要素に対してパラメータとして与えられたコールバック関数を実行する.
  • コールバック関数のパラメータによって伝達することができる.
  • コールバック関数を使用して、ソースアレイ(this)を変更できます.
  • forドアとは異なり、ドアを切ることはできません.
  • const numbers = [1, 2, 3];
    let pows = [];
    
    // for 문으로 순회
    for (let i = 0; i < numbers.length; i++) {
      pows.push(numbers[i] ** 2);
    }
    // forEach 메소드로 순회
    numbers.forEach(item => pows.push(item ** 2));
    
    console.log(pows); // [ 1, 4, 9 ]
    元のアレイを変更する方法
    const numbers = [1, 2, 3, 4];
    
    // 원본 배열을 직접 변경하려면 콜백 함수의 3번째 인자(this)를 사용한다.
    numbers.forEach(function (item, index, self) {
      self[index] = Math.pow(item, 2);
    });
    
    console.log(numbers); // [ 1, 4, 9, 16 ]
    .mapペアリング
    コールバック関数の戻り値(結果値)を使用して新しい配列を作成し、戻ります.
    const numbers = [1, 4, 9];
    
    // 배열을 순회하며 각 요소에 대하여 인자로 주어진 콜백함수를 실행
    const roots = numbers.map(Math.sqrt);
    
    // map 메소드는 새로운 배열을 반환한다
    console.log(roots);   // [ 1, 2, 3 ]
    // map 메소드는 원본 배열은 변경하지 않는다
    console.log(numbers); // [ 1, 4, 9 ]
    forEachメソッドは、配列を巡回し、要素値を参照して操作するための関数です.
    mapメソッドは、配列を巡回し、要素値を他の値にマッピングするための関数です.
    .filter選択、分類、フィルタ
    コールバック関数の実行結果trueの配列要素の値のみを抽出する新しい配列を返します.
  • ifゲートは
  • に代わることができる.
  • フィルタ条件では、特定のエンクロージャのみを抽出して新しいアレイを作成するときに
  • を使用する.
    新しいシナリオを返しますか?
    元のままのものを戻し直したいなら、変数に入れて変えるべきでしょう.
    .reduceサムネイル、凝縮、累積
    💡map、filterでできるのはreduce!
    reduceを呼び出すと、常に初期値が渡され、より安全です.
    const arr = [1, 2, 3, 4, 5];
    
    /*
    previousValue: 이전 콜백의 반환값
    currentValue : 배열 요소의 값
    currentIndex : 인덱스
    array        : 메소드를 호출한 배열, 즉 this
    */
    
    // 합산
    const sum = arr.reduce((previousValue, currentValue) =>
      previousValue + currentValue; // 결과는 다음 콜백의 첫번째 인자로 전달된다
    );
    
    console.log(sum); // 15: 1~5까지의 합
    
    
    // 최대값 취득
    const max = arr.reduce((pre, cur) => 
       pre > cur ? pre : cur;
    );
    
    console.log(max); // 5: 최대값
    オブジェクトのプロパティ値をマージする場合は、初期値を渡す必要があります.
    const products = [
      { id: 1, price: 100 },
      { id: 2, price: 200 },
      { id: 3, price: 300 }
    ];
    
    // 프로퍼티 값을 합산
    const priceSum = products.reduce((pre, cur) =>
        pre + cur.price;
    , 0);
    
    console.log(priceSum); // 600
    コールバック関数「アルバイト」
    パラメータとしての関数
    配列方法を内蔵することで、配列を簡単に変更できます.
    コールバック関数を使用する方法があります.
    なぜコールバック関数を使うのですか?
    ->通常、配列をブラウズする際には、各アクションに特徴があります.
    このフィルタリング動作は想像以上に難しく、文字列や数字で表すのは難しい.
    そこで,自由度を高めるためにコールバック関数を用いる.
    未実行関数と実行関数の違いは?
    関数自体/関数の結果値
    ()の有無は、関数が実行されるかどうかを示します.
    ():コール
    function foo () {
        return function () {
            return 'a';
        }
    }
    //foo ();
    function foo () {
         {
            return 'a';
        }
    //foo ()();
    'a'
    Hershチョコレート三角形...
    ()銀箔だけ剥いている状態です>()()()ラインチョコを剥いたら開く!