코드가 계산(Evaluation) 되어 값을 만드는 것
값으로 다룰 수 있다는 것
const a = 10;
const add10 = a => a + 10;
const r = add10(a);
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
함수를 값으로 다루는 함수이다.
함수를 값으로 다룬다는 말은 함수를 인자 또는 리턴값으로 다룬다는 의미이다.
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
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