JavaScript - Closure


클로저는 함수와 그 함수가 선언되었을 당시의 정보를 담은 lexical environment의 조합이다.

클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. : 선언 당시의 환경에 대한 정보를 담는 객체(구성환경) 이다.

함수와, 그 함수가 선언될 당시의 환경정보 사이의 조합이다. - 함수 내부에서 생성한 데이터와 그 유효범위로 인해 발생하는 특수한 현상/ 상태를 의미한다.

스코프에서 외부로 정보를 제공할 수 있는 유일한 수단은 return 이다. 함수를 리턴한다 하더라도 scope와 lexical environment는 변하지 않는다.

즉 최초 선언시의 정보를 유지한다.

  1. 접근 권한 제어
  2. 지역 변수 보호
function a(){
  var x = 1;
  function b(){
    console.log(x);
  }
  b();
}

//이 위치에서는 x에 접근 못함.
a(); 
  1. 데이터 보존 및 활용
function a(){
  var x =1;
  return function b(){
    console.log(x);
  }
}

var c = a();
c();

그렇다면 외부에서 x를 바꿀 수 있게 하려면?

function a(){
  var _x = 1; //지역변수 보호
  return {
    get x(){ return _x; },
    set x(v) {_x = v;}
  }
}

var c = a();
c.x = 10

스코프는 정의될 때 결정된다.