클로저
- 클로저의 공식적인 정의는
함수와 그 함수가 선언된 렉시컬 환경과의 조합
이다. 다만, 일반적으로 외부 함수보다 중첩함수가 더 오래되는 경우 중첩 함수는 이미 생명 주기가 종료된 외부 함수를 참조할 수 있고 이러한 중첩함수를 클로저라 부른다. 함수의 실행 컨텍스트에서 제거됬다고, 렉시컬 환경까지 소멸하는 것은 아니다.
function foo (){
const x = 1;
function bar (){
console.log(x);
}
bar();
}
foo();
function foo () {
const x = 1;
const y = 2;
function bar() {
console.log(x);
}
return bar;
}
const bar = foo();
bar();
- 클로저는 상태가 의도치 않게 변경되지 않도록 안전하게 은닉하고, 특정 함수에게만 상태 변경을 허용하여 상태를 안전하게 변경하고 유지하기 위해 사용한다.
const increase = (function(){
let num = 0;
return function() {
return ++num;
};
}()};
console.log(increase());
console.log(increase());
console.log(increase());