: 함수를 전달인자로 받을 수 있고, 함수를 리턴할 수 있는 함수
: 특별하게 취급
1. 변수에 할당가능
2. 다른 함수의 전달인자로 전달될 수 있다.
3. 다른 함수의 결과로서 리턴될 수 있다.
=>javascript에서 함수는 일급객체
function double(num) {
return num * 2;
}
//doubleNum은 다른 함수를 인자로 받는 고차함수
function doubleNum(func, num) {
return func(num);
}
//func(=>double)는 함수 doubleNum의 콜백함수
let output = doubleNum(double, 4);
console.log(output); // -> 8
//함수 adder는 다른 함수를 리턴하는 고차함수
function adder(added) {
return function (num) {
return num + added;
};
}
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
function double(num) {
return num * 2;
}
//함수 douvleAdder는 고차함수
//func는 doubleAdder의 콜백함수
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
//double은 doubleAdder의 콜백함수
doubleAdder(5, double)(3); // -> 13
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
*함수를 리턴하는 함수, 함수를 전달인자로 받는 함수 모두 고차함수!!(고차함수가 콜백함수, 커링함수 포함)
-걸러내기 위한 조건을 명시한 함수를 전달인자로 받음
ex)
//배열(arr)의 요소와 값(value)이 일치하는 새로운 배열 리턴
return arr.filter(function(el){
return el===value
})
ex)
//배열의 요소는 수이고, 각 요소를 2배 곱한 새로운 배열로 리턴
return arr.map(function(el){
return el*2
})
-초기값설정 가능, 정하지 않으면 배열의 첫번째 값이 초기값
-acc
: 초기값, cur
:누적값, initial value
: 현재값
ex)
//배열의 요소는 number타입이고 배열의 모든 요소 합 리턴
let newarr=function(a,b){
return a+b
}
return arr.reduce(newarr.)
//또는
return arr.reduce(function(acc,val){
return acc+val;
})
ex)
//특정 배열에 있는 원소를 다른 배열에 복사
let arr=[1,2,3];
let newarr=[];
arr.forEach((arr)=> newarr.push(arr));
let arr=[a,c, b];
array.sort(); //arr[a,b,c]
let arr=[1, 4,21];
array.sort(); //arr[1,21,4]
이때는 비교함수를 이용하여
function(a,b) {return a-b};
이것을 오름차순으로 정렬된다.
=> 적용을 하면 밑의 결과가 나온다.
let arr=[1, 4,21];
array.sort(function(a,b) {return a-b}); //arr[1,4,21]