아래의 순서대로 살펴볼 것이다.
- 평가와 일급
- 일급 함수
- 고차 함수
1. 평가와 일급
평가
- 코드가 계산되어 값을 만드는 것
ex) 1 + 1 이라는 코드가 있다고 가정을 한다면 이 코드는 2로 평가된다.
일급
- 값으로 다룰 수 있다.
- 변수에 담을 수 있다.
- 함수의 인자로 사용될 수 있다.
- 함수의 결과로 사용될 수 있다.
const a = 10;
const add10 = a => a + 10;
const r = add10(a);
console.log(r); //20
2. 일급 함수
자바스크립트에서 함수는 일급이다.
함수가 일급이라는 것은 곧 값으로 다룰 수 있다는 말이며, 함수안에 값으로서 담길 수 있다는 말이다.
const log = console.log
const add5 = a => a + 5;
log(add5); //a => a + 5 //함수 안에 또 다른 함수를 값으로 넣음
log(add(5)); //10 //함수를 넣을 때 파라미터를 넣어줄 수도 있음
// 함수의 결과값으로 함수가 사용될 수 있음
const f1 = () = () => 1;
log(f1()); //() => 1
const f2 = f1();
log(f2); //() => 1
log(f2()); //1
3. 고차 함수
일급 함수: 함수가 값으로 다뤄질 수 있다는 개념
고차 함수: 함수를 값으로 다루는 함수
고차함수의 종류 두 가지
1. 함수를 인자로 받아서 실행해주는 함수
2. 함수를 만들어서 리턴하는 함수
1. 함수를 인자로 받아서 실행해주는 함수
const log = console.log
//case1) apply1
const apply1 = f => f(1); //apply1함수는 add2함수(a => a + 2)를 받아서 이 함수를 내부에서 실행해준다.
const add2 = a => a + 2;
log(apply1(add2)); //3
log(apply1(a => a - 1)); //0
//case2) times(Applicative Programming)
const times = (f, n) => {
let i = -1;
while (++i < n) f(i);
}
times(log, 3);
times(a => log(a+10), 3); //times함수는 a => log(a+10)함수를 받아서 이 함수를 내부에서 실행해준다.
2. 함수를 만들어서 리턴하는 함수
const addMaker = a => b => a + b;
const add10 = addMaker(10);
log(add10(5)); //15
log(add10(10)); //20
line 1의 b => a + b 함수는 a에 대해 기억을 하고 있는 클로저(Closer)이기도 하다.
본 예시에서의 클로저는 함수가 만들어질 때의 환경인 a와 함수 객체 자체(b => a + b)를 통칭하는 것이다.
즉 본 예시는 addMaker는 클로저를 리턴하는 함수가 되는 것이다.
결국 이렇게 함수가 함수를 만들어서 리턴하는 경우, 클로저를 만들어서 리턴하게 된다.
그래서 클로저를 만들어야 할 경우에 이러한 방법을 사용한다.
'javascript' 카테고리의 다른 글
함수형 JavaScript 공부하기 (0) | 2021.07.29 |
---|---|
JavaScript에서의 비동기 프로그래밍 정리 (0) | 2021.07.09 |