[Javascript] Closure
Closure?
MDN에서 Closure는 다음과 같이 정의 되어있다.
A Closure is the combination of a function and the lexical environment within which that function was decalred.
클로저란 함수와 함수가 선언되었을 때 존재하는 어휘적 환경의 조합이다.
function outer(){
var outerVar = 'This is outer variable';
return function inner(){
var innerVar = 'This is inner variable';
console.log(outerVar);
console.log(innerVar);
}
}
var closureFunc = outer();
closureFunc();
위 코드의 결과로, 다음이 출력된다. This is outer variable This is inner variable
실제 변수 outerVal
의 scope는 outer 내부이므로 outer()
가 실행되는 동안만 존재하고 소멸되는 변수이다.
하지만 실제로는 scope가 선언될 때 결정이 되므로 closure()
를 실행할 때 outerVal
에 접근가능한 것이다.
이를 활용하면, 객체지향프로그래밍의 private 변수 선언을 할 수 있으며 다음과 같은 이점을 가진다.
- 접근 권한 제어
- 지역 변수 보호
- 데이터 보존 및 활용
function counter(){
var count = 0;
return {
increse : function(){
count++;
},
decrease : function(){
count--;
},
show : function(){
console.log(count);
}
}
}
const closure = counter();
closure.increase();
......
Leave a comment