더북(TheBook)

게다가 extend 자체는 더 이상 자체 arguments 의사 배열이 필요하지 않기 때문에 화살표 함수가 될 수 있다.

const extend = (target, ...sources) => {
    sources.forEach(source => {
        Object.keys(source).forEach(key => {
            target[key] = source[key];
        });
    });
    return target;
};
const obj = extend({}, {a: 1}, {b: 2});
console.log(obj); // {a: 1, b: 2}

나머지 매개변수에 대한 인수가 전혀 제공되지 않으면 어떻게 될까? 즉, 하나의 인수인 target 객체만 있고 source 객체가 전혀 없이 extend 함수를 호출하면 어떻게 될까(물론 이렇게 하는 것이 이상하다)? 만약 그렇게 한다면 sources의 값은 무엇이라고 생각하는가?

아마도 extend 함수의 구현에서 빈 배열을 얻는다는 답을 추론했을 것이다. 이것이 바로 그 코드가 배열이 있는지 확인하기 위해 소스를 확인할 필요가 없는 이유다(이 기능의 설계자는 이 경우 sourcesundefined를 할당할 수 있었지만 일관성을 위해 빈 배열을 사용했다).

...은 연산자가 아니지만 사람들이 “나머지 연산자”라고 부르는 것을 들을 것이다. 단지 “구문” 또는 “표기”(이 경우 나머지 매개변수 구문/리터럴)이다. 5장에서 해당 내용과 연산자가 아닌 이유(그리고 연산자가 될 수 없는 이유)에 대해 자세히 알아본다.

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