24장 클로저 정리
Modern JavaScript DeepDive
·
클로저
- 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
렉시컬 스코프
- 자바스크립트 엔진은 함수를 어디에 정의했는지에 따라 상위 스코프를 결정하고, 이를 렉시컬 스코프(정적 스코프)라 한다.
클로저와 렉시컬 환경
- 클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
- “그 함수가 선언된 렉시컬 환경”이란 함수가 정의된 위치의 스코프, 즉 상위 스코프를 의미하는 실행 컨텍스트의 렉시컬 환경을 말한다.
- 클로저는 중첩 함수가 상위 스코프의 식별자를 참조하고 있고 중첩 함수가 외부 함수보다 더 오래 유지되는 경우에 한정하는 것이 일반적이다.
- 클로저에 의해 참조되는 상위 스코프의 변수를 자유 변수(free variable)라고 부른다. 클로저란 “함수가 자유 변수에 대해 닫혀있다”라는 의미다. 이를 좀 더 알기 쉽게 의역하자면 “자유 변수에 묶여 있는 함수”라고 할 수 있다.
클로저의 활용
- 클로저는 상태(state)를 안전하게 변경하고 유지하기 위해 사용한다. 다시 말해, 상태가 의도치 않게 변경되지 않도록 상태를 안전하게 은닉(Information hiding)하고 특정 함수에게만 상태 변경을 허용하기 위해 사용한다.
끝!