JavaScript에서 특별한 대우를 받는 객체. 대표적으로 함수가 있다.
다른 고차 함수의 전달인자로 전달되는 함수
function double(num) {
return num * 2;
}
function doubleNum(func, num) // 다른 함수를 인자로 받는 고차함수
return func(num) // func(double) : doubleNum의 콜백함수
함수를 리턴하는 함수
function adder(added) { // 다른 함수를 리턴하는 고차함수
return function(num) { // 익명함수 리턴
return num + added;
};
}
let output = adder(5)(4); // 8 (added = 5, num = 4)
const add3 = adder(3); // (added = 3)
output = add3(2) // 5 (num = 2)
function double(num){ // doubleAdder의 콜백함수
return num * 2;
}
function doubleAdder(added, func) { // 고차함수
const doubled = func(added);
return function (num) {
return num + doubled;
}
}
doubleAdder(5, double)(3) // 13
const addTwice3 doubleAdder(3, double);
addTwice3(2); // 8
모든 배열의 요소 중 특정 조건을 만족하는 요소를 필터링
// # filter ex 1
const isEven = function (num) { // 배열의 요소를 받아서 함수 실행
return num % 2 === 0; // true값만 리턴
}
[1,2,3,4].filter(isEven); // [2,4]
// # filter ex 2
return [1,2,3,4].filter(e => e % 2 === 0); // [2, 4]
모든 배열의 요소에 동일한 행동을 준 값에 대해 반환
return [1,2,3].map(e => e * 2)
배열을 하나의 값으로 만들어줌
초기값 정할 수 있음(정해지지 않았다면 배열의 제일 처음 요소가 초기값, 그 다음값이 현재값)
배열의 각 요소를 특정방법에 따라 원하는 하나의 형태로 응축한다.
return [1,2,3].reduce((acc, cur, idx) => {
console.log('index : ' + idx)
return acc + cur
});
// acc = 0, cur = 1, index = 0, return 1
// acc = 1, cur = 2, index = 1, return 3
// acc = 3, cur = 3, index = 2, return 6
// 직전의 return값은 다음의 acc(누적값)이 된다.
// 최종 return값은 마지막 return 값
// idx는 cur 요소의 인덱스값