function makeCounter() {
let count = 0;
return function () {
return count++;
};
}
const counter1 = makeCounter();
const counter2 = makeCounter();
console.log(counter1()); // ?
console.log(counter1()); // ?
console.log(counter2()); // ?
1️⃣ makeCounter() 호출 → 내부에 count = 0 생성됨
2️⃣ 다시 makeCounter() 호출 → 또 다른 count = 0 생성
console.log(counter1()); // 0
console.log(counter1()); // 1
console.log(counter2()); // 0 ← 이건 다른 인스턴스이므로 다시 0부터 시작
클로저란?
함수가 자신이 정의된 스코프의 변수들을 기억하고,
그 스코프가 종료된 후에도 계속 접근할 수 있는 특성
const counter1 = makeCounter();
// counter1은 count = 0 이 포함된 스코프를 계속 기억
counter1(); // count++ → 0
counter1(); // count++ → 1
개념 | 설명 |
---|---|
클로저 | 함수가 외부 변수(count)를 기억하고 유지함 |
독립 인스턴스 | counter1, counter2는 서로 다른 count 상태 |
count++ | 반환 후 증가 (post-increment) |