클로저는 자바스크립트에서 중요한 개념중 하나이다.
실행 컨택스트에 대한 사전 지식이 필요하다.
클로저는 자바스크립트의 고유 개념이 아니다.
→ 함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용 되는 특징이다.
⇒ 즉, 클로저는 자바스크립트의 고유 개념이 아니기 때문에 ES SCIRPT 명세에 등장하지 않는다.
하지만, MDN에서는 아래와 같이 정의한다.
function init() {
var name = 'Mozilla'; // name is a local variable created by init
function displayName() { // displayName() is the inner function, a closure
alert(name); // use variable declared in the parent function
}
displayName();
}
init();
다음 코드를 예시로 살펴보자.
name
변수와 displayName
이 생성된다.다음을 살펴보면 init()이 실행되는 시점에 name과 함수 displayName이 생성되는 것을 확인 할 수 있다.
→ displayName()은 내부 함수이다.
함수는 선언되는 주변 환경과 관련(Lexical Environment)와 함께 생성된다
즉, 클로저는 함수가 선언되는 주변 환경과 관련하여 생성되는 개념이다.
→ 실행되는 장소 혹은 시점은 관계가 없다.
→ 클로저가 형성되면 환경 정보는 지속적으로 가지고 있게 된다.
자바스크립트의 클로저는, 함수가 선언 될 때, 주변환경에 갇히는 것을 의미한다.
만약 생성된 함수가 주변 환경에 대한 값을 지속적으로 사용하고 있으면?
⇒ Garbage Collection에 의해 제거되지 않아 계속 메모리를 차지한다.