더북(TheBook)

중첩된 범위를 처리하기 위해 환경 객체는 체인으로 함께 연결된다. 각 객체에는 “외부” 객체에 대한 링크가 있다. 코드에 현재 환경 객체에 없는 식별자가 필요한 경우 외부 환경 객체에 대한 링크를 따라 찾아 찾는다(전역 변수가 작동하는 방식인 전역 환경을 통해 필요에 따라 반복됨).

외부 환경은 다양한 방식으로 설정된다. 예를 들어 코드 실행이 블록 스코프 식별자가 있는 블록에 들어가면 블록에 대한 환경 객체는 블록을 외부 환경으로 포함하는 코드에 대한 환경 객체를 가져온다. 함수가 호출되면 호출을 위한 환경 객체는 함수가 생성된 환경(함수에 저장되며 사양에서는 이를 함수의 [[Environment]] 내부 슬롯이라고 함)을 외부 환경으로 가져온다. 이것이 클로저가 작동하는 방식이다.

예를 들어 다음 코드를 보자(전역 스코프에 있다고 가정한다).

let x = 1;
function example() {
    const y = 2;
    return function() {
        let z = 3;
        console.log(z, y, x);
    };
}
const f = example();
f();
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.