⭐ 앞으로 배울 react를 위해 확실히 배워야하는 고차함수
1. 변수에 할당 가능
2. 인자로 전달 가능
3. 반환값으로 사용 가능
4. 데이터 구조에 저장 가능
5. 익명 함수로 생성 가능
👉 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만들기 위해서이다.(추상화)
고차함수의 경우는 크게 두가지로 나눌 수 있다.
❗ 콜백함수 : 다른 함수의 인자로 전달되어, 이후에 호출되는 함수
function func(n, callback) { for (let i = 0; i < n; i++) { callback(i); } } function printNumber(num) { console.log(num); } func(5, printNumber);
func 함수는 callback이라는 함수를 전달인자로 받는 고차 함수이다.
작동방식
func(5, printNumber)
을 실행할 경우 해당 함수가 실행된다.function func(5, printNumber) { for (let i = 0; i < 5; i++) { printNumber(i){ console.log(i); }; } }
function func(num1) { return function (num2) { return num1 * num2; }; } const func2 = func(2); func2(5); // 10
func 함수는 num1라는 매개변수를 받고, 이를 활용하여 새로운 함수를 반환한다.
반환된 함수는 전달된 숫자와 num1을 곱한 값을 반환한다.
func(2)는 전달된 숫자를 2로 곱하는 함수를 반환하므로 해당 코드는 고차함수이다.
작동방식
func2(5)
을 실행할 경우 func(num1)함수가 실행된다.func2
변수는 매개변수로 2를 가지고func()
함수를 포함하고 있으므로 func()
함수가 실행되면서 num1에 매개변수로서 2가 할당된다.function func(2) { return function (5) { return 2 * 5; }; }
내장 고차함수는 여러 종류가 있으며 자주쓰이는 내장 고차함수로 3가지를 볼 수 있다.
const arr = [1, 2, 3, 4, 5]; const result = arr.filter(function(num){ return num % 2 === 0; // 짝수만 필터링 }); // [2, 4]
const arr = [1, 2, 3, 4, 5]; const result = arr.map(function(num){ return num * num // 각 요소를 제곱하여 새로운 배열 생성 }); // [1, 4, 9, 16, 25]
reduce() 함수는 첫 번째 인자로 리듀서 함수를 받는다. 리듀서 함수는 누산기와 현재값을 인자로 받고, 이전 누산값과 현재 요소를 기반으로 새로운 누산값을 반환한다. 두 번째 인자인 0은 초기 누산기 값이다.
즉 .reduce(리듀서 함수(누산값, 현재값){}, 누산기 초기값)
형태로 누산값은 reduce()함수 내에서 최종적으로 return된 값이며 현재값은 지정한 배열에서 순서대로 할당되어 마지막 배열 요소까지 할당되어 실행이 끝나면 최종 누산값을 return한다.
const arr = [1, 2, 3, 4, 5]; const sum = arr.reduce(function(sum, val){ return sum + val; // 배열의 합을 계산 }, 0); // 15