본 포스트는 인프런의 함수형 프로그래밍과 JavaScript ES6+ 강의(링크)를 듣고 정리한 내용입니다.
const a = [1, 2, 3 + 4];
console.log(a); //출력결과 [1, 2, 7];
const a = 10;
const add10 = a => a + 10;
const r = add10(a);
console.log(r); //출력결과: 20
const add5 = a => a + 5;
console.log(add5); //출력결과: a => a + 5
console.log(add5(5)); //출력결과: 10
const f1 = () => () => 1;
console.log(f1()); //출력결과: () => 1
const f2 = f1();
console.log(f2); //출력결과: () => 1
console.log(f2()); //출력결과: 1
const f3 = f1;
console.log(f3); //출력결과: () => () => 1
console.log(f3()); //출력결과: () => 1
log()
라는 함수의 인자로 함수가 사용될 수 있음f1
을 실행하여 넘겨줄 경우 () => 1
이라는 코드가 출력된다.f2
의 경우 f1()
즉 f1
의 실행한 결과 이기 때문에 저런 출력 결과가 나온다.const apply1 = f => f(1);
const add2 = a => a + 2;
console.log(apply1(add2)); //출력결과: 3
console.log(apply1(a => a - 1)); //출력결과: 0
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);
//출력결과:
//10
//11
//12
apply1
은 인자로 함수를 받아서 내부에서 그 함수를 실행하기 때문에 고차 함수이다.times
는 인자로 함수와 다른 값을 받아 해당 값을 이용하여 인자로 받은 함수를 실행한다.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
addMaker
의 결과는 인자인 a
를 기억하는 형태이다. b => a + b
가 a
라는 값을 기억하기 때문에 b => a + b
는 클로저이다.add10
이 정의 되는 과정에서 addMaker
에 인자 값으로 10이 입력 됨으로써 b => a + b
이라는 함수 에서 a
라는 변수가 10이라는 값으로 저장된다.
링크가 작동하지 않고 있어요!!
좋은 글 감사합니다!