두개 모두 함수의 인자를 가변적으로 받고 싶을 경우에 사용되는 방법이다
function foo(...rest){
console.log(rest)
}
foo() // []
foo(1,2) // [1,2]
foo({a:1,b:2}) // [{a:1,b:2}]
function foo(...rest,a,b) // Error
rest 라는 명칭을 사용해야 하는 것이 아니라, 아무거나 가능하다function foo(a,b,...rast)
length 프로퍼티에 영향을 주지 않는다.일단 함수.length 는 함수에 정의된 파라미터의 개수를 출력해주는데
function foo(a,b){
console.log(foo.length) //2
}
이거에 영향을 주지 않는다는 의미이다
function foo(a,b,...rest){
console.log(foo.length) //2
}
ES5에서는 인자의 개수를 사전에 알 수 없는 가변 인자 함수의 경우, arguments 객체를 통해 인수를 확인한다
var foo = function () {
console.log(arguments);
};
foo(1, 2); // { '0': 1, '1': 2 }
Array 형태란 arguments가 length 속성과 더불어 0부터 인덱스 된 다른 속성을 가지고 있지만, Array의 forEach, map과 같은 내장 메서드를 가지고 있지 않다는 뜻입니다.
Array.from 같이 배열로 변환하는 작업이 필요한데, 이것도 ES6에서 나왔다그래서 이전에는
const array = Array.prototype.slice.call(arguments);
이런식으로 사용이 되었다
화살표 함수에서는 arguments 사용이 불가능해서, 무조건 rest parameter를 사용해야 한다