더북(TheBook)

이 예에서 duration의 기본값은 type 매개변수를 사용한다. typeduration보다 먼저 나오기 때문에 괜찮다. typeduration 이후에 온다면 특정 호출에 duration의 기본값이 필요한 경우 ReferenceError가 된다.

function animate(duration = getDefaultDuration(type), type) {
    // 작업을 한다.
}
animate(undefined, "dissolve"); // ReferenceError: type is not defined

위 코드는 2장에서 보았듯이 let 선언 이전에 let으로 선언된 변수의 값에 접근하려고 시도한 것과 같다. 자바스크립트 엔진의 관점에서 이 함수는 다음 코드와 같다(다시 말하지만, 범위가 아니다).

function animate() {
    let duration = /* 인수 0의 값을 가져온다. */;
    if (duration === undefined) {
        duration = getDefaultDuration(type);
    }
    let type = /* 인수 1의 값을 가져온다. */;
    // 작업을 한다.
}

duration 없이 호출하면 기본값을 채우는 코드가 임시 데드존에 있을 때 type을 사용하려고 시도하므로 오류가 발생한다.

규칙은 간단하다. 기본값은 앞에 나열된 매개변수를 사용할 수 있지만 뒤에 나열된 매개변수는 사용할 수 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.