1.클로저란?
생명주기가 종료된 외부함수의 변수를 참조할 수 있는 중첩함수
2. 클로저의 조건
(자바스크립트의 모든 함수는 상위스코프를 기억하므로 이론적으로 모든 함수는 클로저)
(그러나 일반적으로)
1. 중첩함수가 외부함수보다 더 오래 유지되며
2. 중첩함수가 외부함수의 변수를 참조하고 있을때.
클로저라고 한다.
3. 예시
const x = 1;
function outer() {
const x = 10;
const inner = function () {
console.log(x);
};
return inner;
}
const innerFunc = outer();
innerFunc();
4. 렉시컬 환경(Lexical Environment)
- 실행컨텍스트를 구성하는 컴포넌트이자 자료구조
- 식별자와(x), 식별자에 바인딩된 값(x=10), 상위스코프에 대한 참조(outer)를 기록한다.

렉시컬환경의 구성
1) 환경레코드 (EnvironmentRecord)
스코프에 포함된 식별자를 등록하고, 등록된 식별자에 바인딩 된 값을 관리하는 저장소
2) 외부 렉시컬 환경에 대한 참조 (Outer Lexical Environment Reference)
해당 실행컨텍스트를 생성한 상위 코드의 렉시컬 환경을 의미한다.
외부 렉시컬환경에 대한 참조를 통해 스코프체인을 구혈할 수 있다.