arguments 객체는 JavaScript에서 현재 실행 중인 함수에 전달된 인수들을 나타내는 유사 배열(array-like) 객체입니다. 함수를 호출할 때 정의된 매개변수 개수와 상관없이, 실제로 넘겨준 모든 값을 이 객체를 통해 확인하고 다룰 수 있습니다.
문법(Syntax)
[function.]arguments[p]
함수 내부에서는 별도 선언 없이 arguments로 바로 접근할 수 있으며, 인덱스를 사용해 각 인수에 접근합니다(예: arguments[0], arguments[1]).
예제
아래 코드를 실행하면 arguments 객체가 어떻게 동작하는지 직접 확인할 수 있습니다.
<html>
<body>
<script>
function functionArgument(val1, val2, val3) {
var res = "";
res += "Expected Arguments: " + functionArgument.length;
res += "<br />";
res += "Current Arguments : " + arguments.length;
res += "<br />";
res += "Each argument = "
for (p = 0; p < arguments.length; p++) {
res += "<br />";
res += functionArgument.arguments[p];
res += " ";
}
document.write(res);
}
functionArgument(20, 50, 80, "Demo Text!", "Hello World", new Date())
</script>
</body>
</html>
실행 결과 해설
위 예제에서 함수는 세 개의 매개변수(val1, val2, val3)를 정의하고 있지만, 호출 시에는 여섯 개의 인수를 전달했습니다. 결과는 다음과 같이 출력됩니다.
- Expected Arguments: 3 —
functionArgument.length는 함수가 정의상 기대하는 매개변수의 개수를 반환합니다. - Current Arguments: 6 —
arguments.length는 호출 시 실제로 전달된 인수의 개수를 반환합니다. - Each argument — 반복문을 통해 전달된 모든 값(숫자, 문자열, Date 객체 등)을 순서대로 출력합니다.
이처럼 arguments 객체를 활용하면 매개변수 개수에 제한받지 않고 유연하게 함수를 작성할 수 있습니다.
알아두면 좋은 점
- arguments 객체는 배열과 비슷하지만 실제 배열이 아니므로
map(),filter()같은 배열 메서드를 직접 사용할 수 없습니다. 필요하다면Array.from(arguments)또는 스프레드 연산자([...arguments])로 변환하세요. - 화살표 함수(arrow function)에는 자체적인 arguments 객체가 없으므로, 일반 함수 표현식이나 함수 선언문에서만 사용할 수 있습니다.
- 모던 JavaScript에서는 가변 인수 처리 시 나머지 매개변수(rest parameter)(
function fn(...args))를 사용하는 것이 권장됩니다.