MDN에서 정의하는 클로저는 "함수와 함수가 선언된 렉시컬 환경의 조합"이다.
이를 이해하기 위해선 렉시컬 환경에 대한 이해가 필요한데,
소스코드가 평가되고 실행 컨텍스트가 생성되는 과정에서 실행 컨텍스트를 구성하는 컴포넌트인 렉시컬 환경이 생성된다. 렉시컬 환경은 두개의 컴포넌트로 구성되는데 아래와 같다.
간단한 예시로 함수(이하 내부함수)를 반환하는 함수(이하 외부함수)를 들 수 있다.
내부함수를 반환함과 동시에 외부함수의 생명주기 종료되어도 내부함수의 렉시컬 환경은 외부 렉시컬 환경에 대한 참조를 통해 외부 렉시컬 환경에 등록된 변수등을 참조할 수 있다. 이러한 동작 방식을 클로저라고 한다.
클로저를 응용한 방식으로 커링(하나의 함수에 여러개의 인자를 받지 않고, 중첩함수를 이용하여 함수마다 인자를 받게끔 하는 방식), 클로저 모듈패턴(함수 내부에 선언한 변수에 해당 함수가 반환한 객체의 메소드를 통해 간접적으로 접근하기→ 외부에서 직접적으로 변수에 접근 할수 없음으로 메소드로 설정된 제한된 액션으로만 변수를 제어할 수 있다. ) 등이 있다.