이 글은 유인동님의 함수형 프로그래밍 강의 내용을 정리한 글입니다.
코드가 계산되어 값을 만드는 것
1 + 2 // 3으로 평가된다.
[1,2 + 3] // [1, 5]로 평가된다.
const a = 10; // 변수에 담을 수 있다.
const add = a => a + 10; // 함수의 인자로 사용될 수 있다.
const r = add10(a); // 함수의 결과로 사용될 수 있다.
const add5 = a => a + 5; // 함수
log(add5); // 함수의 인자로 함수로 사용할 수 있다.
log(add5(5)); // 함수의 결과를 다른 함수에 전달할 수 있다.
const f1 = () => () => 1; // 함수의 결과를 함수로 할 수 있다.
log(f());
const f2 = f1(); // 다른 변수에 함수를 담을 수 있다.
log(f2);
log(f2());
함수를 값으로 다루는 함수
고차함수는 아래 2가지 유형으로 나뉜다.
// ex1
const apply1 = f => f(1);
const add2 = a => a + 2;
log(apply(add2));
// apply1은 add2라는 함수를 인자로 받아서 실행한다.
// ex2
const times = (f, n) => {
let i = -1;
while (++i < n) f(i);
};
times(log, 3);
const addMaker = a => b => a + b;
const add10 = addMaker(10);
log(add10(10)); // 10
b => a + b
가 클로저가 된다.
리턴하는 함수는 a
를 기억하고 있다.
클로저란?
외부함수와 외부함수 안에 내부함수가 있다고하자.
그리고 내부함수가 외부함수의 변수를 사용하고 있다고 하자.
내부함수가 외부함수의 변수를 기억하고 있는 상태 와 내부함수 자체를 함께 통칭해서 말하는 용어이다.
함수가 함수를 만들어서 리턴하면 결국 클로저를 만들어서 리턴한다.