--- title: arguments 객체 slug: Web/JavaScript/Reference/Functions/arguments tags: - Functions - JavaScript - Reference translation_of: Web/JavaScript/Reference/Functions/arguments ---
arguments
객체는 함수에 전달된 인수에 해당하는 Array
형태의 객체입니다.
Note: ES6 호환 코드를 작성 중이라면 되도록 나머지 매개변수 구문을 사용해야 합니다.
참고: "Array
형태"란 arguments
가 {{jsxref("Array.length", "length")}} 속성과 더불어 0부터 인덱스 된 다른 속성을 가지고 있지만, {{jsxref("Array")}}의 {{jsxref("Array.prototype.forEach()", "forEach")}}, {{jsxref("Array.prototype.map()", "map")}}과 같은 내장 메서드를 가지고 있지 않다는 뜻입니다.
arguments
arguments
객체는 모든 함수 내에서 이용 가능한 지역 변수입니다. arguments
객체를 사용하여 함수 내에서 모든 인수를 참조할 수 있으며, 호출할 때 제공한 인수 각각에 대한 항목을 갖고 있습니다. 항목의 인덱스는 0부터 시작합니다.
예를 들어, 함수가 세 개의 인수를 받은 경우 다음과 같이 접근할 수 있습니다.
arguments[0] arguments[1] arguments[2]
각 인수를 설정하거나 재할당할 수도 있습니다.
arguments[1] = 'new value';
arguments
객체는 {{jsxref("Array")}}가 아닙니다. Array
와 비슷하지만, {{jsxref("Array.prototype.length", "length")}} 빼고는 {{jsxref("Array.prototype.pop", "pop()")}}과 같은 어떤 Array
속성도 없습니다. 그러나 실제 Array
로 변환할 수 있습니다:
var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments);
arguments
를 실제 Array
로 변환하기 위해 ES2015의 {{jsxref("Array.from()")}} 메서드 또는 전개 연산자를 사용할 수도 있습니다.
var args = Array.from(arguments); var args = [...arguments];
당신이 형식상 받기로 선언된 것보다 많은 인수로 함수를 호출하는 경우 arguments
객체를 사용할 수 있습니다. 이 기법은 가변 인수가 전달될 수 있는 함수에 유용합니다. 함수에 전달된 인수의 수를 결정하기 위해 arguments.length
를 쓰세요, 그 뒤에 arguments
객체를 사용하여 각 인수를 처리하세요. 함수 signature에 매개변수의 수를 결정하기 위해서는, Function.length
속성을 쓰세요.
arguments.callee
arguments.caller
{{ Obsolete_inline() }}arguments.length
arguments[@@iterator]
이 예는 여러 문자열을 연결하는 함수를 정의합니다. 함수의 유일한 형식 인수는 연결할 항목을 구분하는 문자를 지정하는 문자열입니다. 함수는 다음과 같이 정의됩니다:
function myConcat(separator) { var args = Array.prototype.slice.call(arguments, 1); return args.join(separator); }
이 함수에 인수를 얼마든지 전달할 수 있으며 리스트 내 항목처럼 각 인수를 사용하여 리스트를 만듭니다.
// "red, orange, blue" 반환 myConcat(", ", "red", "orange", "blue"); // "elephant; giraffe; lion; cheetah" 반환 myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); // "sage. basil. oregano. pepper. parsley" 반환 myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
이 예는 리스트 HTML을 포함하는 문자열을 만드는 함수를 정의합니다. 함수의 유일한 형식 인수는 리스트가 정렬되지 않은(bulluet(글 머리 기호)가 붙는) 경우 "u
" 또는 정렬된(번호가 매겨진) 경우 "o
"인 문자열입니다. 함수는 다음과 같이 정의됩니다:
function list(type) { var result = "<" + type + "l><li>"; var args = Array.prototype.slice.call(arguments, 1); result += args.join("</li><li>"); result += "</li></" + type + "l>"; // end list return result; }
이 함수에 인수를 얼마든지 전달할 수 있고, 표시된 유형의 리스트에 항목으로 각 인수를 추가합니다. 예를 들면:
var listHTML = list("u", "One", "Two", "Three"); /* listHTML은: "<ul><li>One</li><li>Two</li><li>Three</li></ul>" */
arguments
객체는 나머지 매개변수, 기본 매개변수 또는 비구조화된 매개변수와 함께 사용될 수 있습니다.
function foo(...args) { return arguments; } foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }
그러나, 비엄격 함수에서는 mapped arguments
객체는 함수가 어떤 나머지 매개변수, 기본 매개변수 또는 비구조화된 매개변수든 포함하지 않는 경우에만 제공됩니다. 예를 들어, 기본 매개변수를 사용하는 다음 함수에서는, 100 대신에 10
이 반환됩니다:
function bar(a=1) { arguments[0] = 100; return a; } bar(10); // 10
이 예에서, 어떤 나머지 매개변수, 기본 매개변수 또는 비구조화된 매개변수가 없는 경우에는, 100이 반환됩니다:
function zoo(a) { arguments[0] = 100; return a; } zoo(10); // 100
스펙 | 상태 | 설명 |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | 초기 정의. JavaScript 1.1에서 구현됨 |
{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.functions.arguments")}}