Rest Parameters

연쇄코딩마·2020년 10월 2일
0

TIL

목록 보기
7/15
post-custom-banner

들어가기전에

function timeToGoHome(speed, distance) {
  let time = distance / speed;
  return time;
}
timeToGoHome(20, 100);

우리는 이렇게 함수명 () 안에 매개변수(Parameters)를 통해 전달받은 인자(arguments)을 사용합니다.
즉 speed와 distance는 인자(因子)를 무엇을 받느냐에 따라서 다르기 때문에 매개변수(媒介變數)입니다. 변할 수 있다는 말입니다. 함수가 실행되기 위해서는 인자가 들어가야 되니까요.

본문

만약에 하기와 같은 함수가 있다고 가정합시다.

function getMaxNum(num){
	return Math.max(num)
}
getMaxNum(3,5,6,7,8)
getMaxNum(4,5,6,7,8,9,10)

이 함수의 답은 무엇일까요? 3 or 4 입니다. 전혀 Math.max() 메소드에 맞지 않은 해답이 나옵니다. num라는 매개변수로 변수하나만 설정했기때문에 3이나 4밖에 받아 들이지 않았습니다. 저렇게 인자의 길이가 유동적인 경우라면 어떻게 해야될까요?

Rest Parameters 를 써주면 됩니다. ES6

Rest Parameters란 상기 케이스 처럼 인자가 유동적일때 유용한 함수입니다. 매개변수앞에 ...만 붙혀주면 끝나죠.

function getMaxNum(...num){
	return Math.max(...num)
}
getMaxNum(3,5,6,7,8) -> 8
getMaxNum(4,5,6,7,8,9,10) -> 10

이렇게 고쳐 준다면 정상 적인 우리가 원하는 답을 출력받을수 있습니다.

function getSumNum(...num){
	return num.reduce(function(acc, cur){
 		return acc + cur;
 });
}
getSumNum(3,5,6,7,8) -> 29

이런 경우에는 ...이 필요없습니다.

이 비슷(?)한 것으로 arguments 라는 키워드를 사용하는 방법이 있는데

function getMaxNum(){
	console.log(arguments)
} 
getMaxNum(2,3,4) --> Arguments(3) [2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]

요런식으로 출력합니다 이 경우에는 배열의 메소드는 사용할수 없습니다.

profile
只要功夫深,铁杵磨成针
post-custom-banner

0개의 댓글