closure trace

클로저 렉시컬 환경

makeCounter 같은 예제에서는 함수 실행은 끝나도 반환된 내부 함수가 count가 있던 환경을 참조하므로 상태가 유지됩니다.

Call stack

Call stack

함수 호출마다 실행 컨텍스트가 push되고 종료되면 pop됩니다.

Lexical env

Lexical env

현재 변수 기록과 외부 환경 참조가 스코프 체인을 만듭니다.

Closure

Closure

내부 함수가 선언 당시 외부 변수를 기억해 나중에도 접근합니다.

State copy

State copy

makeCounter를 두 번 호출하면 서로 다른 count 환경이 생깁니다.

변수 검색 현재 환경에서 못 찾으면 Outer Environment Reference를 따라 올라갑니다.
보존 조건 반환된 함수나 콜백이 참조하면 가비지 컬렉션 대상이 아닙니다.
클로저 상태 활용 데이터 은닉, 상태 유지, 비동기 콜백에서 클로저가 자주 쓰입니다.

클로저를 이해하는 핵심은 함수 실행 종료와 변수 환경 소멸이 항상 같은 순간이 아니라는 점입니다.