JavaScript - Closure
in JS
클로저는 함수와 그 함수가 선언되었을 당시의 정보를 담은 lexical environment의 조합이다.
클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. : 선언 당시의 환경에 대한 정보를 담는 객체(구성환경) 이다.
함수와, 그 함수가 선언될 당시의 환경정보 사이의 조합이다. - 함수 내부에서 생성한 데이터와 그 유효범위로 인해 발생하는 특수한 현상/ 상태를 의미한다.
스코프에서 외부로 정보를 제공할 수 있는 유일한 수단은 return 이다. 함수를 리턴한다 하더라도 scope와 lexical environment는 변하지 않는다.
즉 최초 선언시의 정보를 유지한다.
- 접근 권한 제어
- 지역 변수 보호
function a(){
var x = 1;
function b(){
console.log(x);
}
b();
}
//이 위치에서는 x에 접근 못함.
a();
- 데이터 보존 및 활용
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
스코프는 정의될 때 결정된다.