고차함수란 함수의 일급객체로 취급하여 인자로 받아서 결과로 반환하는 함수를 의미한다.
글로만 보면 어려운데 가볍게 코드로 봐보자
ex) 함수를 인자로 가져다 사용하는 경우
function sq (num) {
return num * num;
}
function sq2 (func,num) {
return func(num);
}
let result = sq2(sq,2);
console.log(result) // 4
ex) 함수를 리턴하는 경우
function sum (sel){
return function(num){
return num + sel;
}
}
let result = sum(10)(3);
console.log(result); // 13
let add = sum(5); // sum은 함수를 반환하므로 5를 반환하는 함수를 할당한다.
let add2 = add(2); // 전에 들어있던 5를 반환하는 함수에 인자 2가 할당되어 num + sel이 되어 7 반환
console.log(add2) // 7
ex) 함수를 인자로 받고 함수를 리턴
function divide(num){
return num / 2;
}
function Rdivide(num,func) {
const doubled = func(num);
return function (num) {
return num + divide;
};
}
Rdivide(10,divide)(3); // 8
const result = Rdivide(6,divide);
result(2) // 5
자바스크립에는 고차함수가 내장되어 있는 메서드들이 존재하는데
예를 들어 map과 filter, reduce ,forEach 등이 있다.
ex) 객체 내에서 특정조건을 만족하는 데이터를 배열로 리턴할때
function adult(arr) {
return arr.filter(el => {
if(el.age >= 18){
return true;
}).map(el => el.name);
}
let output = adult([
{ name: 'Choi', age: 15 },
{ name: 'Han', age: 14 },
{ name: 'Bek', age: 14 },
]);
console.log(output); // --> []
output = adult([
{ name: 'Cho', age: 14 },
{ name: 'Park', age: 87 },
{ name: 'Kim', age: 53 },
{ name: 'Lee', age: 43 },
]);
console.log(output); // --> ['Park', 'Kim', 'Lee']
output = adult([]);
console.log(output); // --> []
아직 고차함수 사용이 깔끔하지 않아서 더러워보이지만 점점 사용하면서 깔끔하게 사용하는 법도 터득해야겠다. ㅎㅎ!
'JS' 카테고리의 다른 글
DOM(Document Object Model) (2) | 2022.09.20 |
---|---|
git 관련 명령어 모음 (0) | 2022.09.16 |