대표적인 일급 객체 중 하나인 함수
1. 변수에 할당(assignment) 할 수 있다.
2. 다른 함수의 인자(argument)로 전달될 수 있다.
3. 함수의 결과로서 리턴될 수 있다.
고차 함수(higher order function)는 함수를 인자(argument)로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수입니다.
이때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 합니다.
1. 다른 함수를 인자로 받는 경우
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num);
}
* doubleNum은 다른 함수를 인자로 받는 고차 함수
* doubleNUm의 첫 번째 인자 func는 doubleNum의 콜백 함수
2. 함수를 리턴화는 경우
function adder(added) {
return function (num) {
return num + added;
};
}
* adder는 다른 함수를 리턴하는 고차 함수
3. 함수를 인자로 받고, 함수를 리턴하는 경우
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
* doubleAdder는 다른 함수를 인자로 전달받으며 다른 함수를 리턴하는 고차 함수
* doubleAdder의 인자 func는 doubleAdder의 콜백 함수
자바스크립트에는 기본적으로 내장된 고차함수가 여럿 있다.
1. filter(추출)
모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메소드입니다.
여기서 걸러내는 기준이 되는 특정 조건은 filter 메소드의 인자로 전달됩니다. 이때 전달되는 조건은 함수의 형태입니다. filter 메소드는, 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문에 고차함수입니다.
2. map(전체)
let arr = [1, 2, 3, 4]
let newarr = arr.map(function(a){
return a * 2
})
함수 안에 a라는 파라미터는 arr자료안에 있는 하나하나의 데이터를 의미하며
arr안에 모두 같은 작업을 할 때 사용, 원래의 데이터를 수정하지 않고 새로운 배열을 반환합니다.
3. reduce(응집)
let arr = [1, 2, 3, 4]
let newarr = arr.reduce(function(acc, cur){
return acc + cur
})
reduce는 콜백함수를 실행하고 하나의 결과값을 return한다.
여러개의 데이터들을 하나의 데이터로 응집하는 것이다.