더북(TheBook)

3.2.2 기본값은 자체 범위에서 평가된다

배운 것처럼 기본값은 목록의 기본값 이전에 있는 한 다른 매개변수를 참조할 수 있으며, 이전 예의 getDefaultDuration 함수와 같이 외부 범위의 일부인 것을 참조할 수 있다. 하지만 함수 본문 내에 정의된 그 어떤 것도 참조할 수 없으며 호이스트된 것도 참조할 수 없다. 코드 3-3을 실행해 보자.

코드 3-3 기본값은 함수 본문에 있는 엔트리를 참조할 수 없다–default-access-body.js

function example(value = x) {
    var x = 42;
    console.log(value);
}
example(); // ReferenceError: x is not defined

임시 데드존이 없기 때문에 var를 사용했으며 선언된 범위의 맨 위에 올려진다. 그런데 기본값 표현식은 여전히 사용할 수 없다. 그 이유는 기본값이 함수를 포함하는 범위와 함수 내부 범위 사이에 존재하는 자체 범위에서 평가되기 때문이다(그림 3-1 참조). 함수가 다음과 같이 기본값을 처리하는 다른 함수로 래핑된 것과 같다.

function example(value) {
    if (value === undefined) {
        value = x;
    }
    const exampleImplementation = () => {
        var x = 42;
        console.log(value);
    };
    return exampleImplementation();
}
example(); // ReferenceError: x is not defined
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.