[Effective JavaScript] 가변 인자 함수를 생성하기 위해 arguments를 사용하자

김범식·2023년 7월 3일
0

Effective JavaScript

목록 보기
4/33
post-thumbnail

arguments란?


javascript 함수 내에서 사용할 수 있는 특별한 객체, 함수가 호출될 때 전달된 모든 인자들을 포함하고 있다.

다음과 같은 속성을 사용할 수 있다.

  • length: arguments 객체에 전달된 인자들의 개수
  • callee : 현재 실행중인 함수에 대한 참조 반환
  • index : 특정 인덱스에 해당하느 인자 가져오는 속성
function sum(){
	var total = 0;
	for( var i = 0; i<arguments.length;i++){
		total += arguments[i];
	}
	return total;
}

console.log(sum(1,2,3)); //6
console.log(sum(4,5,6,7)); //22


가변 인자 함수를 생성하기 위해 arguments를 사용하자


우선 고정인자를 사용하는 averageOfArray 를 살펴보자

function averageOfArray(a){
	for( var i = 0, sum = 0, n = a.length ; i < n;i++){
		sum += a[i];
	}
	return sum/n
}

averageOfArray([2,7,1,8,2,8,1,8]); //4.625

그리고 가변인자 average의 함수도 살펴보자

function average(){
	for(var i = 0, sum = 0, n = arguments.length i < n;i++){
		sum += arguments[i];
	}
	return sum/n;
}

argumentsaverage에 매개변수로 전달되어진 값들이 arguments에 저장된다.

만약 가변인자 arguments를 계산된 배열로 호출하고 싶다면


방법1

var list = [2,7,1,8,2,8,1,8];
average.apply(null, list);

방법2

function average(){
	return averageOfArray(arguments); //가변인자가 계산된 배열의 형태로 전달됨
}

가변인자로 받은후에 argument배열로 넘겨준다면 apply를 사용하지 않고 깔끔한 코드를 만들 수 있다.



기억할 점

  • 가변 인자 함수를 구현하기 위해 암묵적인 arguments 객체를 사용하라
  • 사용자가 apply 메서드를 사용할 필요가 없도록 고정인자 버전의 가변인자 함수를 추가로 제공하는 것을 고려하라
profile
frontend developer

0개의 댓글