인수 객체
함수 코드에서 특수 객체 인수를 사용하면 개발자는 명시적으로 이름을 지정하지 않고도 매개변수 이름에 액세스할 수 있습니다.
예를 들어, sayHi() 함수에서 첫 번째 매개변수는 message입니다. 이 값은 첫 번째 인수의 값인 인수[0]을 사용하여 액세스할 수도 있습니다. 첫 번째 인수는 위치 0에 있고 두 번째 인수는 위치 1에 있습니다.
따라서 매개변수의 이름을 명시적으로 지정하지 않고도 함수를 다시 작성할 수 있습니다.
function sayHi() { if (arguments[0] == "bye") { return; } alert(arguments[0]); }
검출 매개변수 개수
또한 인수 개체를 사용하여 함수의 매개변수 수를 감지할 수 있습니다. 단지 인수.길이 속성을 참조하면 됩니다.
다음 코드는 각 함수 호출에 사용되는 매개변수 수를 출력합니다.
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); howManyArgs(); howManyArgs(12);
위 코드는 "2", "0", "1"을 차례로 표시합니다.
참고: 다른 프로그래밍 언어와 달리 ECMAScript는 함수에 전달된 매개변수 수가 함수에서 정의한 매개변수 수와 같은지 확인하지 않습니다. 개발자 정의 함수는 오류 없이 인수(Netscape 문서에 따르면 최대 255개)를 수용할 수 있습니다. 누락된 인수는 정의되지 않은 상태로 함수에 전달되며 추가 함수는 무시됩니다.
함수 오버로드 시뮬레이션
함수 오버로드를 시뮬레이션하기 위해 함수에 전달되는 매개변수 수를 결정하려면 인수 객체를 사용하세요.
function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 5); } else if(arguments.length == 2) { alert(arguments[0] + arguments[1]); } }
doAdd(10); //"15" 출력
doAdd(40, 20); //"60" 출력
매개변수가 하나만 있는 경우 doAdd() 함수는 매개변수에 5를 더합니다. 매개변수가 2개인 경우 두 매개변수를 더하고 그 합계를 반환합니다. 따라서 doAdd(10)은 "15"를 출력하고 doAdd(40, 20)은 "60"을 출력합니다.
오버로드만큼 좋지는 않지만 ECMAScript의 이러한 한계를 극복하는 데는 충분합니다.