[JS] 클로저
STUDY/JavaScript2025. 1. 12. 14:28
클로저(Closer)
: 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 종료된 외부 함수의 변수를 참조할 수 있는 것
const x = 1;
function outer()
{
const x = 10;
const inner = function() { console.log(x); };
return inner;
}
const innerFunc = outer();
innerFunc();
- outer 종료 시 inner를 반환하고 종료된다.
- 하지만 마지막 줄 innerFunc() 에서는 반환된 x의 값이 출력된다.
- 반환된 중첩 함수 inner가 클로저 로써 외부 함수의 x를 참조하여 사용된다.
-> 자바스크립트의 모든 함수는 자신의 상위 스코프를 기억하고 있기에 가능
-> 그러하여 outer의 실행 컨텍스트는 종료되어 삭제되었지만 렉시컬 환경까지 제거되지 않아
inner에서 outer 참조가 가능
클로저의 활용
: 상태를 안전하게 변경(은닉)하고 특정 함수에게만 상태 변경을 허용시킬 수 있음
const counter = (function () {
let num = 0;
return {
increase() {
return ++num;
},
decrease() {
return 0 < num ? --num : 0;
}
};
}());
console.log(counter.increase()); //1
console.log(counter.increase()); //2
console.log(counter.increase()); //3
MSN 공식 문서
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures
'STUDY > JavaScript' 카테고리의 다른 글
[JS] 실행 컨텍스트 (0) | 2025.01.12 |
---|---|
[JS] VSCode 확장프로그램 (0) | 2025.01.12 |
댓글()