코드가 계산(Evaluation) 되어 값을 만드는 것
const add10 = (a) => a + 10;
console.log(add10); // a => a + 10
console.log(add10(4)); // 14
const f1 = () => () => 1;
console.log(f1()); // () => 1
const f2 = f1();
console.log(f2); // () => 1
console.log(f2()); // 1
수학이랑 똑같이 생각하면 될 듯하다.
함수를 값으로 다루는 함수
const apply1 = (f) => f(1);
const add2 = (a) => a + 2;
console.log(apply(add2)); // 3
/*
apply(add2)
(add2) => add2(1)
(add2) => (1) => 1 + 2
*/
const times = (f, n) => {
let i = -1;
while(++i < n>) f(i);
};
times(console.log, 3);
// 0
// 1
// 2
times(a => console.log(a + 10), 3);
const addMaker = (a) => (b) => a + b;
const add10 = addMaker(10);
console.log(add10); // b => a + b
console.log(add10(5)); //15
console.log(add10(10)); //20