ECMAScript arguments 객체

arguments 객체

함수 코드에서 특수 객체 arguments를 사용하여 개발자파라미터 이름을 명확히 지정하지 않아도 됩니다그래서 그들을 접근할 수 있습니다.

예를 들어, 함수 sayHi()에서 첫 번째 파라미터는 message입니다. arguments[0]로도 이 값을 접근할 수 있습니다. 즉, 첫 번째 파라미터의 값입니다(첫 번째 파라미터는 위치 0에 있으며, 두 번째 파라미터는 위치 1에 있으며, 이를 이어 나갑니다).

따라서 명확히 이름을 지정하지 않아도 함수를 재구성할 수 있습니다:

function sayHi() {
  if (arguments[0] == "bye") {
    return;
  }
  alert(arguments[0]);
}

매개변수 개수 검사

함수의 매개변수 개수를 검사하기 위해 arguments 객체를 사용할 수 있으며, arguments.length 속성을 참조합니다.

다음 코드는 함수 호출마다 사용된 매개변수의 개수를 출력합니다:

function howManyArgs() {
  alert(arguments.length);
}
howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);

위의 코드는 "2", "0", "1" 순으로 표시됩니다.

주의사항:다른 프로그래밍 언어와 달리, ECMAScript는 함수에 전달된 매개변수의 개수가 함수 정의의 매개변수 개수와 일치하는지 확인하지 않습니다. 개발자가 정의한 모든 함수는 어떤 개수의 매개변수를 받을 수 있으며(NetScape 문서에 따르면 최대 255개), 어떤 오류도 발생하지 않습니다. 누락된 매개변수는 undefined로 전달되고, 초과된 매개변수는 무시됩니다.

함수 오버로드 모의

arguments 객체를 사용하여 함수에 전달된 매개변수의 개수를 확인하여 함수 오버로드를 모의할 수 있습니다:

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를 추가합니다. 두 개의 매개변수가 있을 때, 두 개의 매개변수를 더하고 그 합을 반환합니다. 따라서, doAdd(10)은 "15"을 출력하고, doAdd(40, 20)은 "60"을 출력합니다.

오버로드보다 좋지 않지만, ECMAScript의 이러한 제한을 피하는 데는 충분합니다.