[JS] 일급함수와 고차함수

# 평가와 일급

평가

코드가 계산(Evaluation) 되어 값을 만드는 것

일급

값으로 다룰 수 있다는 것

const a = 10;
  1. 변수에 담을 수 있다.
const add10 = a => a + 10;
  1. 함수의 인자로 사용될 수 있다.
const r = add10(a);
  1. 함수의 결과(리턴 값)로 사용될 수 있다.
log(r); //20

# 일급 함수

자바스크립트에서 함수는 일급이다.
즉, JS 함수는 조합성과 추상화의 도구이다.

  • 함수를 값으로 다룰 수 있다.
  • 함수의 결과값으로 함수가 사용될 수 있다.
  • 함수를 다른 변수에 담을 수 있다.
  • 담겨진 함수를 원하는 시점에 평가해 결과를 만들 수 있다.
const add5 = a => a + 5;
log(add5); //a => a + 5
log(add5(5)); //10

const f1 = () => () => 1;
log(f1()); //() => 1

const f2 = f1();
log(f2); //() => 1
log(f2()); //1

# 고차 함수

함수를 값으로 다루는 함수이다.
함수를 값으로 다룬다는 말은 함수를 인자 또는 리턴값으로 다룬다는 의미이다.

1. 함수를 인자로 받아서 실행하는 함수

  • apply1
const apply1 = f => f(1);
const add2 = a => a + 2;
log(apply1(add2)); //3
log(apply1(a => a - 1)); //0
  • times
const times = (f, n) => {
  let i = -1;
  while (++i < n) f(i);
}

times(log, 3); // 0 1 2
times(a => log(a + 10), 3); // 10 11 12

2. 함수를 만들어 리턴하는 함수(클로저를 만들어 리턴하는 함수)

  • addMaker : a 를 기억하는 함수인 클로저(b ⇒ a + b)를 만들어 리턴하는 함수
const addMaker = a => b => a + b;
const add10 = addMaker(10);  // -> add10에 b => 10 + b 함수 대입
log(add10(5)); //15
log(add10(10)); //20

좋은 웹페이지 즐겨찾기