대부분의 JS 내장함수는 인수의 개수에 제약을 두지 않습니다.
ex) Math.max(1,2,3,4,5,6,7,8)
이번 챕터에선 임의의 개수의 인수를 받는 방법을 알아보도록 하겠습니다.
...
const sum = (a, b) => a + b;
sum(1, 2, 3, 4, 5) >> 3;
함수를 이렇게 사용해도 오류가 나지 않습니다.
여분의 매개변수는 그 값들을 담을 배열을 ...
로 붙여주면 함수 선언부에 포함시킬 수 있습니다.
다시 한번 선언해보겠습니다.
const sumAll = (...args) => {
let sum = 0;
for (let arg of args) sum += arg;
return sum;
};
sum(1, 2, 3, 4, 5) >> 15;
이렇게 사용하게 되면 모든 인수가 배열 args에 모이게 됩니다.
...args => [1,2,3,4,5] 를 의미하게 됩니다.
예시 코드)
const callName = (firstName, middleName, lastName, ...etc) => {
console.log(firstName); // 권
console.log(middleName); // 해
console.log(lastName); // 농
console.log(etc); // [("바보", "천재", "농구")];
};
callName("권", "해", "농", "바보", "천재", "농구");
...args
는 항상 마지막에 있어야 합니다.나머지 매개변수는 남아있는 인자를 모으는 역할이기 때문에 항상 마지막에 있어야 합니다.
유사 배열 객체인 arguments를 사용하면 인수에 접근할 수 있습니다.
function call() {
alert(arguments);
call("바보", "천재"); // 바보 천재
}
(?? 신기하다..)
하지만 화살표 함수에서는 arguments 를 지원하지 않는다고 합니다.
그래서 잘 안쓰지 싶네요
스프레드 문법을 아래와 같이 사용하기도 합니다
let str = 'abcd'
alert([...str])=> a,b,c,d
같은 작업을 Array.from 으로도 사용할 수 있습니다.
arr
와 [...arr]
는 메모리 주소가 다르기 때문에 참조가 달라 다른 배열입니다.그래서 복사에서 유용합니다.
let objCopy = Object.assign({}, obj);
let arrCopy = Object.assign([], arr);
위와 같이 사용하는 것보다 편하기 때문에 spread 문법을 선호합니다.
클로저를 이용하면 아래와 같은 함수도 생성가능합니다.
function sum(a){
return function(b){
return a+b
}
}
sum(1)(2)(3) 처럼 사용이 가능해집니다.