더북(TheBook)

arguments에는 몇 가지 문제가 있다.

느슨한 모드에서는 양식 매개변수에 연결되는 방식으로 인해 성능 문제가 발생한다(엄격 모드를 사용하여 해결할 수 있다).

모든 인수가 있다. 즉, 양식 매개변수와 동일한 인수를 넘어서 인덱싱해야 한다(extend 예에서 n = 0 대신 n = 1for 루프를 시작하는 이유다).

배열과 비슷하지만 배열이 아니므로 forEach이나 map 같은 배열 기능이 없다.

화살표 함수에는 자체 arguments 객체가 없다.

필자의 생각이지만 이러한 인수의 기능별 의미를 포착하지 못하는 어설픈 이름을 가지고 있다.

ES2015는 이러한 문제에 대한 해결책인 “나머지” 매개변수를 추가했다. 마지막 매개변수 앞에 줄임표(...)를 선언하면 자바스크립트 엔진이 해당 지점(인수의 “나머지”)에서 모든 실제 인수를 수집하여 다음과 같이 실제 배열로 해당 매개변수에 넣도록 지시한다.

나머지 매개변수를 사용하도록 이전 extend 함수를 업데이트하는 경우 나머지 매개변수의 값이 실제 배열이기 때문에 for 대신 forEach(또는 6장에서 배우게 될 for-of)를 사용할 수 있다.

function 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}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.