본문 바로가기
JS

고차함수(Higher order function)

by 진득한진드기 2022. 9. 21.

고차함수란 함수의 일급객체로 취급하여 인자로 받아서 결과로 반환하는 함수를 의미한다.

 

글로만 보면 어려운데 가볍게 코드로 봐보자

 

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