실행 컨텍스트와 클로저 (Closure)
클로저는 "함수가 선언될 당시의 렉시컬 환경(Lexical Environment)을 기억하는 현상"입니다. 외부에서 접근할 수 없는 은닉화된(Private) 변수를 만들 때 유용하게 쓰입니다.
클로저(Closure) 시각화
자판기 안의 동전(count)은 밖에서 마음대로 조작할 수 없고,
오직 정해진 버튼(return된 함수들)을 통해서만 조작이 가능합니다.
function createCounter() {
// 1. 이 변수는 외부에서 직접 접근할 수 없습니다 (Private)
let count = 0;
// 2. 하지만 내부에서 반환된 함수들은 이 변수를 '기억'합니다 (클로저)
return {
increase: function() {
count++;
return count;
},
decrease: function() {
count--;
return count;
},
getCount: function() {
return count;
}
};
}
const myCounter = createCounter();
console.log(myCounter.count); // undefined (직접 접근 불가)
console.log(myCounter.increase()); // 1
console.log(myCounter.increase()); // 2
console.log(myCounter.decrease()); // 1
console.log(myCounter.getCount()); // 1