arguments
객체는 함수에 전달된 인수에 해당되는 Array
형태의 객체입니다.
Array 형태란, arguments가 length 속성과 더불어 0부터 인덱스된 다른 속성을 가지고 있지만,
Array
의 forEach, map과 같은 내장 메서드를 가지고 있지 않다는 뜻이다.
arguments
객체는 함수를 호출할 때 넘긴 인자들이 배열 형태로 저장된 객체를 의미한다. 이 객체는 실제 배열이 아닌 유사배열 객체이다.
function func1(a, b, c) {
console.log(arguments[0]);
// expected output: 1
console.log(arguments[1]);
// expected output: 2
console.log(arguments[2]);
// expected output: 3
}
func1(1, 2, 3);
//1
//2
//3
arguments
객체는 모든 함수 내에서 이용 가능한 지역 변수입니다. arguments
객체를 사용하여 함수 내에서 모든 인수를 참조할 수 있으며, 호출할 때 제공한 인수 각각에 대한 항목을 갖고 있습니다. 항목의 인덱스는 0부터 시작합니다.
예를 들어, 함수가 세 개의 인수를 받은 경우 다음과 같이 접근할 수 있습니다.
arguments[0]
arguments[1]
arguments[2]
arguments[1] = 'new value'; // 각 인수를 설정하거나 재할당할 수도 있습니다.
arguments
객체는 Array
가 아닙니다. Array
와 비슷하지만, length
빼고는 pop()
과 같은 어떤 Array
속성도 없습니다. 그러나 실제 Array
로 변환할 수 있습니다:
let args = Array.prototype.slice.call(arguments);
let args = [].slice.call(arguments);
arguments
를 실제 Array
로 변환하기 위해 ES2015의 Array.from()
메서드 또는 스프레드 연산자를 사용할 수도 있습니다.
var args = Array.from(arguments); // Array.from()
var args = [...arguments]; // 스프레드 연산자
arguments
객체는 매개변수가 개수가 정확하게 정해지지 않은 함수를 구현하거나 전달된 인자의 개수에 따라 서로 다른 처리를 해줘야 하는 함수를 개발하는데 유용하게 사용할 수 있다.
function sum() {
let result = 0;
for (let i = 0; i < arguments.length; i++) {
result += arguments[i]
}
return result;
}
sum(1, 2, 3); //6