[JS] 나머지 매개변수와 스프레드 문법

heyhey·2023년 3월 21일
0

JavaScript

목록 보기
12/14

대부분의 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

유사 배열 객체인 arguments를 사용하면 인수에 접근할 수 있습니다.

function call() {
  alert(arguments);
  call("바보", "천재"); // 바보 천재
}

(?? 신기하다..)

하지만 화살표 함수에서는 arguments 를 지원하지 않는다고 합니다.
그래서 잘 안쓰지 싶네요

문자열 스프레드

스프레드 문법을 아래와 같이 사용하기도 합니다

let str = 'abcd'
alert([...str])=> a,b,c,d

같은 작업을 Array.from 으로도 사용할 수 있습니다.

배열, 객체 복사

  1. arr[...arr] 는 메모리 주소가 다르기 때문에 참조가 달라 다른 배열입니다.
  2. 하지만 내용은 같습니다.

그래서 복사에서 유용합니다.

let objCopy = Object.assign({}, obj);
let arrCopy = Object.assign([], arr);

위와 같이 사용하는 것보다 편하기 때문에 spread 문법을 선호합니다.

클로저로 함수 만들기

클로저를 이용하면 아래와 같은 함수도 생성가능합니다.

function sum(a){
  	return function(b){
    	return a+b
    }
}

sum(1)(2)(3) 처럼 사용이 가능해집니다.

profile
주경야독

0개의 댓글