구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식이다. (* mdn docs)
배열 혹은 객체에서 각각 값(value)이나 프로퍼티(property)
를 분해하여 별도의 변수에 담을 수 있게 해주는 것이다!
var a, b, rest;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20
할당받을 변수를 왼쪽에, 분해할 대상은 오른쪽에 대입한다.
그래서 배열 [10, 20]이 분해되어 각각 a, b에 담긴 것이다.
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a); // 10
console.log(b); // 20
console.log(rest); // [30, 40, 50]
여기서 10, 20이 각각 a, b에 할당되고 나머지 요소가 ...rest
로 받아서 rest
변수에 배열로 저장된 것이다!
Rest 파라미터(나머지 매개변수)는 매개변수 이름 앞에 세개의 점 ...을 붙여서 정의한 매개변수를 의미한다. Rest파라미터는 함수에 전달된 인수들의 목록을 배열로 전달받는다.
function bar(param1, param2, ...rest) {
console.log(param1); // 1
console.log(param2); // 2
console.log(rest); // [3, 4, 5]
}
bar(1, 2, 3, 4, 5)
Rest파라미터는 이름 그대로 먼저 선언된 매개변수에 할당된 인수를 제외한 나머지 인수들로 구성된 배열이 할당된다. 따라서 Rest파라미터는 반드시 마지막 파라미터여야 한다!!
- Rest 파라미터는 마지막 파라미터여야 한다
- Rest파라미터는 단 하나만 선언할 수 있다.
- Rest 파라미터는 함수 정의 시 선언한 매개변수 개수를 나타내는 함수 객체의 length 프로퍼티에 영향을 주지 않는다.