클로저(closure) 넌 대체...
30 Jun 2021 | 퍼온자료[펌] 클로저(closure) 넌 대체…
요약 :
렉시컬 환경 (Lexical Environment) : 특정 코드가 작성, 선언된 환경
-
함수와 렉시컬 환경의 조합
-
함수가 생성될 당시의 외부 변수를 기억, 생성 이후에도 계속 접근 가능
function a(x) { return function(y) { return x + y; } } const b = a(3); console.log(b(2)); // 5
처음 전역 렉시컬 환경에 a는 function, b는 초기화가 안된 상태로 정의된다.
const b = a(3);
구문이 실행되면서 a의 렉시컬 환경에 x가 3인 상태로 저장된다.console.log(b(2));
구문이 실행되면서 a의 return 함수에 대한 렉시컬 환경이 생성되고 y의 값이 2로 저장된다. 따라서, x + y의 값이 5로 찍힐 수 있다. a가 생성된 이후에도 하위 함수에서 상위 함수의 x에 접근이 가능한 것을 볼 수 있는데 이 것을 클로저라고 한다. -
스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑이라 한다.
-
클로저가 없다면 상태를 유지하기 위해 전역 변수의 사용이 잦아져 많은 부작용을 일으킬 수 있다.
-
클로저를 사용하면 불변성을 지키고 Side Effect를 최소화 할 수 있다.
-
하지만 클로저를 남발하면 메모리 문제로 오버 플로우가 발생하고 스코프 체인을 거슬러 올라가는 동작이 많아 성능 문제로 이어질 수 있다.