[javascript] 클로저
클로저
클로저는 함수와 함수가 선언된 환경(Lexical Environment)의 조합이다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다.
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
//myFunc변수에 displayName을 리턴함
//유효범위의 Lexical Environment를 유지
myFunc();
//리턴된 displayName 함수를 실행(name 변수에 접근)
몇몇 프로그래밍 언어에서, 함수 안의 지역 변수들은 그 함수가 처리되는 동안에만 존재한다. makeFunc()
실행이 끝나면 name
변수에 더 이상 접근할 수 없게 될 것으로 예상하는 것이 일반적이다. 하지만 자바스크립트의 경우는 다르다. 그 이유는 자바스크립트는 함수를 리턴하고, 리턴하는 함수가 클로저를 형성하기 때문이다. 위 코드의 경우 myFunc
이 실행될 때 생성된 displayName
함수의 인스턴스에 대한 참조다. displayName
의 인스턴스는 변수 name
이 있는 lexical environment에 대한 참조를 유지한다. 이런 이류로 myFunc
이 호출될 때 변수 name
은 사용할 수 있는 상태로 남게 되고 “Mozilla”가 alert
에 전달된다.