728x90
함수와 그 함수가 선언된 렉시컬 환경의 조합
- 자바스크립트 고유의 개념이 아님
렉시컬 스코프
- 함수를 정의한 위치에 기반한 스코프
- 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에서 정의된 위치에 따라 결정됨
[[Environment]]
- 함수는 내부 슬롯
[[Environment]]
에 상위 스코프의 참조(정의된 환경)를 저장함 - 따라서 자신의 상위 스코프를
[[Environment]]
를 통해서 확인함 - 함수 렉시컬 환경의
외부 렉시컬 환경에 대한 참조
에 함수 객체의[[Environment]]
에 저장된 참조값이 할당됨
클로저와 렉시컬 환경
- 클로저
- 외부 함수보다 중첩 함수가 오래 유지되는 경우, 중첩 함수는 생명주기가 종료된 외부 함수의 변수를 참조할 수 있음
- 중첩 함수가 상위 스코프의 식별자를 참조 + 중첩 함수가 외부 함수보다 오래 유지되는 경우
- 이러한 중첩 함수 --> 클로저
- 외부 함수의 실행 컨텍스트는 컨텍스트 스택에서 pop되지만, 렉시컬 환경은 중첩함수에 의해서 참조되기 때문에 유지됨 --> GC 대상 X
- 클로저에 의해 참조되는 상위 스코프의 식별자 -->
자유 변수
- 필요할 때에 적극적으로 사용
클로저 활용
- 클로저는 상태를 안전하게 변경, 유지하기 위해 사용
- 상태를 은닉하고 특정 함수에게만 상태 변경 허용 --> 상태를 안전하게 관리
캡슐화, 정보 은닉
- 캡슐화
- 프로퍼티와 메서드를 하나로 묶는 것
- 정보 은닉
- 외부에 비공개 처리 --> 객체 상태 변경 방지 + 결합도를 낮춤
- 자바스크립트는 정보 은닉을 완전하게 지원하지 않음 --> 그래서 private 제안이 나타남
학습 도서
- '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스
'Language | Basic > JavaScript' 카테고리의 다른 글
[JavaScript 스터디] 클래스 (0) | 2021.02.01 |
---|---|
[JavaScript 스터디] 실행 컨텍스트 (0) | 2021.02.01 |
[JavaScript 스터디] this (0) | 2021.02.01 |
[JavaScript 스터디] 빌트인 객체 (0) | 2021.01.31 |
[JavaScript 스터디] strict mode (0) | 2021.01.30 |