클로저

클로저(Closure) 는 함수가 자신이 생성된 환경(변수)을 기억하는 것입니다.

쉽게 말하면

함수가 끝나도 그 안의 변수가 사라지지 않고 유지되는 현상이에요.

예시

function outer() {
    let count = 0;  // 외부 함수의 변수

    function inner() {
        count++;  // 외부 변수를 기억하고 접근
        console.log(count);
    }

    return inner;
}

const counter = outer();  // outer 함수 실행 끝남
counter();  // 1
counter();  // 2
counter();  // 3

outer() 함수는 끝났는데, count 변수가 살아있어요!

원래대로라면?

function outer() {
    let count = 0;
}
outer();
// 함수 끝 → count 변수 사라짐 (원래는 이게 정상)

클로저가 생기는 조건

function 외부함수() {
    let 변수 = 값;

    function 내부함수() {
        // 외부함수의 변수 사용
    }

    return 내부함수;  // 내부함수를 반환
}

내부 함수가 외부 함수의 변수를 참조하면, 그 변수가 기억된 채로 유지됩니다.

실용적인 예시

// 클로저로 private 변수 만들기
function createCounter() {
    let count = 0;  // 외부에서 직접 접근 불가

    return {
        increment: () => ++count,
        decrement: () => --count,
        getCount: () => count
    };
}

const counter = createCounter();
counter.increment();  // 1
counter.increment();  // 2
counter.getCount();   // 2
// count 변수에 직접 접근 불가능

한줄 요약

클로저 = 함수가 자신이 만들어진 환경의 변수를 기억하고 접근할 수 있는 것

CSLOG에서 보기