함수형 프로그래밍은 선언형 프로그래밍의 일종으로 선언형 프로그래밍이란 어떻게 할건지를 나타내기보다는 무엇을 할 건지 설명하는 방식을 말한다.
const pureFunction = (a,b) => a+b;
일급객체의 특징으로는 아래로 특정지을 수 있다.
const a = 10;
const add10 = a => a+10;
const r = add10(a);
“A closure is the combination of a function and the lexical environment within which that function was declared.”
클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical environment)과의 조합이다.
[출처] MDN
스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑(lexical scoping)이라 한다.
const addClosure = a =>b =>a+b; //함수를 리턴하는 함수
const innerF = addClosure(5);
console.log(innerF(3)) // 8
위의 예제에서 함수를 리턴하는 함수라고 할 수 있다. 이 때, b => a+b라는 함수를 리턴하게 되고, a라는 매개변수를 반영하는 함수이다.
순서(콜스택 관점)
1.addClouser함수를 실행 -> b=>a+b 함수를 반환하고 (innerF에 할당)종료.
2.innerF 함수 실행 (내부함수 실행)
이 순서를 파악하면, 이미 addClosure함수를 종료 했는데? innerF 함수 즉, b=> a+b 를 실행하는 함수에서 a의 값을 기억하는 것처럼 보인다. 즉, 외부함수 밖에서 내부함수가 호출되더라도 외부함수의 지역변수에 접근할 수 있는 함수를 클로저라고 부른다.
많은 도움이 되었습니다, 감사합니다.