[javascript] 클로저

less than 1 minute read

클로저

클로저는 함수와 함수가 선언된 환경(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에 전달된다.

참조

MDN, Closure

TOAST, 자바스크립트의 스코프와 클로저

Updated: