클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다.
자신을 포함하고 있는 외부 함수보다 중첩 함수가 더 오래 유지되는 경우, 외부 함수 밖에서 중첩 함수를 호출해도 외부 함수의 지역 변수에 접근할 수 있는 함수이다.
중첩 함수의 [[Environment]]
내부 슬롯에 의해 외부 함수가 참조되고 있으므로 가비지 컬렉션의 대상이 되지 않는다. 따라서 외부 함수의 수명이 다해 실행 컨텍스트 스택에서 pop되더라도 '중첩 함수가 참조하는 한' 렉시컬 환경은 사라지지 않는다.
클로저는 state를 안전하게 변경하고 유지하기 위해 사용한다.
즉, 상태가 의도치 않게 변경되지 않도록 상태를 안전하게 은닉(information hiding)하고 특정 함수에게만 상태 변경을 허용하기 위해 사용한다.