[JS]클로저

Hanji·2021년 12월 9일
0
post-thumbnail

클로저란?

상위 스코프의 식별자를 참조하고, 중첩 함수가 외부함수의 생명주기보다 오래 살아남는 경우, 중첩함수를 클로저라고 한다.

💡 스코프?
정의된 변수를 사용할 수 있는 범위. 자바스크립트는 함수 스코프이다.
즉, 함수 안에 정의된 변수는 함수 안에서만 유효하고, 함수 외부에서는 유효하지 않음.

// 클로저 예시
function outer() { //외부 함수
    const a = 1;
    const b = 2;
    
    return function inner() { //중첩 함수. 클로저
        console.log(a); //외부함수(상위 스코프)의 식별자 참조
    }
}

const bar = outer();
bar();

아래의 경우 inner 함수는 클로저가 아니다

// 상위 스코프의 어떤 식별자도 참조하지 않음
function outer() { //외부 함수
    const a = 1;
    const b = 2;
    
    return function inner() { //중첩 함수.
        const c = 3;
        console.log(c);
    }
}

const bar = outer();
bar();

// 상위 스코프의 식별자 참조하지만, 중첩함수가 반환되지 않음
// (외부 함수의 생명주기가 중첩함수보다 길 경우)
function outer() { //외부 함수
    const a = 1;
    const b = 2;
    
    function inner() { //중첩 함수. 클로저였지만 outer보다 먼저 소멸
        console.log(a); 
    }
    inner();
}
outer();

자바스크립트-기술면접-클로저-정리
자바스크립트 클로저? 간단히 핵심만 파악하기

0개의 댓글