← 질문 목록
#77깊이 0
함수가 끝난 뒤 지역 변수가 남는 이유는?
내부 함수가 지역 변수의 렉시컬 환경을 계속 참조하기 때문이다. 바깥 함수 호출이 끝나도 내부 함수가 살아 있으면 캡처한 바인딩도 유지된다.
- 내부 함수실행 코드와 환경 참조를 가진다
- 렉시컬 환경캡처한 변수 바인딩을 보관한다
- 참조된 객체도달 가능한 동안 메모리에 남는다
클로저는 값을 만든 시점의 복사본이 아니라 바인딩을 잡는다. 같은 바인딩을 공유한 함수들은 변경을 함께 본다. let의 블록별 바인딩은 루프 문제를 피한다.
은닉 상태와 콜백에 유용하지만 큰 객체를 캡처하면 수명이 늘어난다. 이벤트 리스너와 타이머를 해제해 불필요한 참조를 끊어야 한다.