클로저란?
- 함수와 그 함수가 선언됐을 때의 렉시컬(Lexical)환경에 따른 상호 관계
- 렉시컬 환경은 클로저가 생성된 위치에 따라 결정
environment
와 outerEnviornmentReference
에 의해 스코프가 결정되고 스코프 체인이 결정된다
- 외부 함수의 실행컨텍스트가 끝났는데도 불구하고 내부 함수가 살아남아 정보를 저장하고 있는것
어떻게?
- [[enviornment]]
- 모든 함수는 [[enviornment]] 라는 숨김 프로퍼티를 가지고있음
- 여기엔 함수가 만들어진 렉시컬 환경에 대한 참조가 저장되어있음
- 이는 단 한번 생성되며 변하지 않음
- 중첩 함수를 할당 했을 때, 그것의 참조 환경(enviornment)이 저장되어 있기 때문에 자바스크립트의 가비지 컬렉터가 컬렉팅 대상에서 제외시킴