나머지 매개변수 ...

황성호·2021년 3월 13일
0

함수의 정의와 상관없이 넘겨주는 인수의 개수에는 제약이 없음

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

alert( sum(1, 2, 3, 4, 5) );//오류 발생하지않음

...args 배열

function sumAll(...args) { // args는 배열의 이름입니다.
  let sum = 0;

  for (let arg of args) sum += arg;

  return sum;
}

alert( sumAll(1) ); // 1
alert( sumAll(1, 2) ); // 3
alert( sumAll(1, 2, 3) ); // 6

-------------------------------------------------------

function showName(firstName, lastName, ...titles) {
  alert( firstName + ' ' + lastName ); // Julius Caesar

  // 나머지 인수들은 배열 titles의 요소가 됩니다.
  // titles = ["Consul", "Imperator"]
  alert( titles[0] ); // Consul
  alert( titles[1] ); // Imperator
  alert( titles.length ); // 2
}

showName("Julius", "Caesar", "Consul", "Imperator");

‘arguments’ 변수
배열이 아닌 유사배열객체
인덱스를 사용해 모든 인수 접근가능

function showName() {
  alert( arguments.length );
  alert( arguments[0] );
  alert( arguments[1] );

  // arguments는 이터러블 객체이기 때문에
  // for(let arg of arguments) alert(arg); 를 사용해 인수를 나열할 수 있습니다.
}

// 2, Julius, Caesar가 출력됨
showName("Julius", "Caesar");

// 1, Bora, undefined가 출력됨(두 번째 인수는 없음)
showName("Bora");

화살표 함수에는 존재하지 않음
화살표 함수에서 사용시 일반함수의 arguments객체를 가져옴

function f() {
  let showArg = () => alert(arguments[0]);
  showArg();
}

f(1); // 1

spread 문법
배열을 통째로 매개변수에 넘겨주는 방법
함수를 호출할 때 ... arr를 사용하면, 이터러블 객체 arr이 인수 목록으로 확장됨

let arr = [3, 5, 1];

alert( Math.max(...arr) ); // 5 (전개 문법이 배열을 인수 목록으로 바꿔주었습니다.)

배열 복사시에도 사용가능

let arr = [1, 2, 3];
let arrCopy = [...arr]; // spread the array into a list of parameters
                        // then put the result into a new array

// do the arrays have the same contents?
alert(JSON.stringify(arr) === JSON.stringify(arrCopy)); // true

// are the arrays equal?
alert(arr === arrCopy); // false (not same reference)

// modifying our initial array does not modify the copy:
arr.push(4);
alert(arr); // 1, 2, 3, 4
alert(arrCopy); // 1, 2, 3
profile
개발!

0개의 댓글