JS 자바스크립트 : 고차함수

first-class citizen

자바스크립트에는 일급객체 라는 개념이 있습니다. 말 그대로 특별한 대우를 받는다는 의미로 보면 크게 틀리지 않습니다. 그 중 하나가 함수(Function)인데, 자바스크립트에서 함수는 아래와 같이 특별한 취급을 받습니다

// 1. 변수에 할당(assignment)할 수 있다.
// ( 이 경우 함수 선언식과 다르게, hoisting이 적용되지 않습니다. )

const square = function (num) {
	return num * num;
}


// 2. 다른 함수의 parameter로 전달될 수 있다. (Call back) 

function calculator(func, num)
	return func(num);
});

let output = calculator(squre, 4); 
console.log(output) // -> 16

// 3. 다른 함수의 결과로 반환될 수 있다.

function adder(added) {
  return function (num) {
    return num + added;
  };
}

const add3 = adder(3);
let output = add3(2)
console.log(output) // -> 5

고차함수 (Higher-Order Function)

고차함수는 함수를 인자로 받거나, 함수를 리턴하는 함수를 의미합니다. 그리고 이 때 다른 함수의 parameter로 전달되는 함수를 콜백 함수 (Callback function)라고 합니다.

먼저 자바스크립트 내부에 포함된 (built-in) 고차함수들 중 배열 메소드를 예로 살펴보겠습니다.

Array.prototype.filter

filter 메소드는 인자로 전달되는 콜백함수의 조건이 참인 요소들을 리턴합니다. 콜백 함수는 전달받는 배열의 요소들을 받아, 조건에 따라 true 또는 false 를 리턴해야 합니다.

const isEven = function (num) {
  return num % 2 === 0;
};

let arr = [1, 2, 3, 4];
// let output = arr.filter(짝수);
// '짝수'를 판별하는 함수가 조건으로서 filter 메소드의 인자로 전달됩니다.
let output = arr.filter(isEven);
console.log(output); // ->> [2, 4]

const isLteFive = function (str) {
  // Lte = less then equal
  return str.length <= 5;
};

arr = ['hello', 'code', 'states', 'happy', 'hacking'];
// output = arr.filter(길이 5 이하)
// '길이 5 이하'를 판별하는 함수가 조건으로서 filter 메소드의 인자로 전달됩니다.
let output = arr.filter(isLteFive);
console.log(output); // ->> ['hello', 'code', 'happy']

좋은 웹페이지 즐겨찾기