클로저와 렉시컬 환경

박경찬·2022년 7월 14일
0

JavaScript

목록 보기
11/26




innerFunc를 호출하면 outer 함수는 중첩 함수 inner를 반환하고 생명주기를 마감한다. 함수의 실행이 종료되면 outer 함수의 실행 컨텍스트는 실행 컨텍스트 스택에서 제거된다. 이때 outer함수의 지역 변수 x와 변수 값 10을 저장하고 있던 outer 함수의 실행 컨텍스트가 제거되었으므로 outer 함수의 지역 변수 x 또한 생명 주기를 마감한다.

외부함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할수 있다.
이러한 중첩 함수를 클로저 라고 한다.

위 inner 함수는 자신이 평가될 때 자신이 정의된 위치에 의해 결정된 상위 스코프를 내부 슬롯에 저장한다. 이때 저장된 상위 스코프는 함숙다 존재하는 한 유지된다.

위 outer 함수가 평가되어 함수 객체를 생성할 때 현재 실행중인 실행컨텍스트의 렉시컬 환경, 즉 전역 렉시컬 환경을 outer 함수 객체의 내부 슬롯에 상위 스코프로서 저장한다.

0개의 댓글