outer() 실행 컨텍스트
호출 중에는 지역 변수와 내부 함수 선언을 함께 가진다.
return 뒤 스택 제거
함수 프레임은 사라지지만 필요한 환경은 남을 수 있다.
함수 호출은 새 실행 컨텍스트를 만들고, 함수 선언 위치는 렉시컬 환경의 연결을 남긴다. 클로저는 이 연결을 나중까지 보존한다.
엔진은 새 실행 컨텍스트를 만들고 호출 스택 위에 올린다.
현재 변수와 외부 환경 참조가 묶여 스코프 체인을 이룬다.
반환된 함수는 선언 당시의 외부 변수를 계속 참조할 수 있다.
스택에서 사라진 함수의 필요한 환경만 클로저로 남아 동작한다.
함수 안의 변수는 실행 컨텍스트의 렉시컬 환경에서 관리된다.
현재 환경에 없으면 외부 환경 참조를 따라 전역까지 올라간다.
내부 함수가 외부 변수를 쓰면 필요한 값은 회수되지 않는다.
큰 객체를 오래 붙잡는 클로저는 메모리 유지 시간을 늘릴 수 있다.
클로저를 볼 때는 함수가 호출된 위치보다 선언된 위치, 그리고 반환된 함수가 어떤 외부 변수를 계속 읽는지를 먼저 확인한다.