티스토리 뷰

  • 클로저는 자바스크립트의 고유 개념이 아니다.
  • 함수를 일급 객체로 취급하는 함수형 프로그래밍언어에서 사용되는 중요한 특성이다.
  • MDN에서는 "클러저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다"라고 설명한다.

자바스크립트는 렉시컬 스코프를 따르는 프로그래밍 언어이다.

const x =1;
function outerFunction(){
    const x =10; 
        function innerFunction(){
            console.log(x) //10 
            }
}

→ innerFunction에서 outerFunction에 있는 x에 접근이 가능하다.

중첩함수 inner의 상위스코프는 외부함수 outerFunction이기 때문이다.

다음은 inner에서 outer 변수에 접근이 불가능하다.

const x =1;

function outerFunction(){
    const x =10; 
}

function innerFunction(){
    console.log(x) // 1 
}

→ 이 같은 현상이 발생하는 이유는 자바스크립트가 렉시컬 스코프를 따르는 프로그래밍 언어이기 때문이다.

자바스크립트 엔진은 함수를 어디서 호출하느냐가 아닌 어디서 정의하냐에 따라 상위 스코프를 결정한다.

이를 렉시컬 스코프(정적 스코프)라 한다.

스코프의 실체는 실행 컨텍스트 의 렉시컬 환경 이다. 이 렉시컬 환경은 자신의 "외부 렉시컬 환경에 대한 참조(outer Lexical Environment Reference" 를 통해 상위 렉시컬 환경과 연결된다.

→ 이것이 바로 스코프 체인 이다.