외부함수가 생성될 때 환경을 기억하는 함수로 내부함수(자식함수)에서 외부함수(부모함수)의 변수를 참조하여 접근이 가능한것을 의미한다.
우선 클로저를 이해하기전에 내부함수와 외부함수의 개념을 간략하게 알아야한다.
내부함수 : 자바스크립트 함수 내 또 다른 함수를 선언할 수 있고 내부함수 자체에서 클로저를 해준다.
// 전역 범위 (global scope)
function makeFunc() { // 외부함수(부모함수)
// 지역 변수
var name = "Mozilla";
function displayName() { // 내부함수(자식함수)
alert(name);
}
/* myFunc변수에 displayName을 리턴함!
-> 자바스크립트는 다른 프로그래밍 언어와 다르게 리턴하는 함수가 클로저를 형성한다. */
return displayName;
} // <- makeFunc() 의 scope(유효범위)
var myFunc = makeFunc(); // 리턴된 displayName 값이 myFunc라는 변수에 할당되겠죠?
myFunc(); // 리턴된 displayName 함수를 실행 (name 변수에 접근)
| 즉, 외부 함수의 실행이 끝나고 소멸된 이후에도 내부함수가 외부함수의 변수를 접근하여 참조 할 수 있다.