Rest 파라미터 구문은 정해지지 않은 수 인수를 배열로 나타날 수 있게 한다.
말이 어려우니 예시를 보도록 하자.
function sum(...theArgs) {
return theArgs.reduce(previous,current) {
return previous + current;
});
}
console.log(sum(1, 2, 3)); // expected output: 6 console.log(sum(1, 2, 3, 4)); // expected output: 10
함수의 마지막 인자 앞에 ...
를 붙여 모든 나머지 인수를 대체한다. 마지막 파라미터만 "Rest 파라미터" 가 될 수 있습니다.
function foo(a, b, ...theArgs) {
console.log(a);
console.log(b);
console.log(theArgs);
}
foo(1, 2, 3, 4, 5, 6, 7);
// expected output :
// a : 1
// b : 2
// theArgs = [3, 4, 5, 6, 7]
주의할 점이 있다. Rest 파라미터는 무조건 인자 마지막에 써야한다.
function foo(...rest, a, b, c) {}; 이런식으로 사용할 수 없다.
Rest 파라미터와 arguments의 차이
· arguments 객체는 실제 배열이 아니기 때문에 배열 메서드(map, forEach 등)를 사용할 수 없다.
· arguments 객체는 함수로 전달된 인자 모두를 포함한다.
· Rest 파라미터는 실제 배열로 배열 메서드를 사용할 수 있다.
arguments를 배열로 바꾸는 방법 3가지
function foo(a, b) {
// 첫 번째
var arr = Array.prototype.slice.apply(arguments);
// 두 번째
var arr = [].slice.apply(arguments);
// 세 번째
var arr = Array.from(arguments);
var first = arr.shift(); // 된다. 배열로 변했으므로 0번째 인자를 반환
}
위의 세 가지를 알고 있으면 코딩을 하는데 상당히 효율적일 것 같다.
p.s. 가끔 코드블럭에 주석을 달면 그 아랫줄도 주석처리가 되는거 같다. ..
'Programming > Javascript' 카테고리의 다른 글
[Javascript] this 이것은 무엇인가 (0) | 2019.02.25 |
---|---|
[Javascript] hoisting & scope 호이스팅과 스코프 (ES5, ES6 비교) (0) | 2019.02.25 |
[Javascript] insertAdjacentElement 함수에 대해 알아보자 (0) | 2019.02.20 |
[Javascript] 유용한 배열 메서드 6가지(forEach, map, some, every, filter, reduce) (0) | 2019.02.18 |
[Javascript] 유사배열 arguments 객체 (0) | 2019.02.17 |