JavaScript

arguments

함수에는 arguments라는 변수에 담긴 숨겨진 유사 배열이 있다. 이 배열에는 함수를 호출할 때 입력한 인자가 담겨있다. 아래 예제를 보자. 결과는 10이다.

function sum(){
    var i, _sum = 0;	
	for(i = 0; i < arguments.length; i++){
		document.write(i+' : '+arguments[i]+'<br />');
		_sum += arguments[i];
	}	
	return _sum;
}
document.write('result : ' + sum(1,2,3,4));

함수 sum은 인자로 전달된 값을 모두 더해서 리턴하는 함수다. 그런데 1행처럼 함수 sum은 인자에 대한 정의하가 없다. 하지만 마지막 라인에서는 4개의 인자를 함수 sum으로 전달하고 있다. 함수의 정의부분에서 인자에 대한 구현이 없음에도 인자를 전달 할 수 있는 것은 왜 그럴까? 그것은 arguments라는 특수한 배열이 있기 때문이다.

arguments는 함수안에서 사용할 수 있도록 그 이름이나 특성이 약속되어 있는 일종의 배열이다. arguments[0]은 함수로 전달된 첫번째 인자를 알아낼 수 있다. 또 arguments.length를 이용해서 함수로 전달된 인자의 개수를 알아낼 수도 있다. 이러한 특성에 반복문을 결합하면 함수로 전달된 인자의 값을 순차적으로 가져올 수 있다. 그 값을 더해서 리턴하면 인자로 전달된 값에 대한 총합을 구하는 함수를 만들 수 있다.

arguments는 사실 배열은 아니다. 실제로는 arguments 객체의 인스턴스다.

매개변수의 수

매개변수와 관련된 두가지 수가 있다. 하나는 함수.length, 다른 하나는 arguments.length이다. arguments.length는 함수로 전달된 실제 인자의 수를 의미하고, 함수.length는 함수에 정의된 인자의 수를 의미한다. 아래의 코드를 보자.

function zero(){
    console.log(
		'zero.length', zero.length,
		'arguments', arguments.length
	);
}
function one(arg1){
	console.log(
		'one.length', one.length,
		'arguments', arguments.length
	);
}
function two(arg1, arg2){
	console.log(
		'two.length', two.length,
		'arguments', arguments.length
	);
}
zero(); // zero.length 0 arguments 0 
one('val1', 'val2');  // one.length 1 arguments 2 
two('val1');  // two.length 2 arguments 1

 

댓글

댓글 본문
  1. DreamBoy
    2023.10.13. JavaScript 입문 수업 - 함수지향 - arguments 파트 수강했습니다.
  2. 늦은개발자
    23.07.24 완료. 함수 정의시에는 arg가 2개인데, 호출해서 쓸 때는 1개 집어넣을 수 있나? 신기..
  3. 진진리
    2022.05.09
  4. 낀찐
    2022. 02. 03 완료
  5. pmxsg
    2021.12.16. 수강
  6. 드림보이
    2021.12.08. arguments 파트 수강완료
  7. GelandeWagen
    ok
  8. Grit
    감사합니다.
  9. seaWater
    2021. 9. 14. 완료
    2021. 9. 28. 완료
  10. choi
    완료
  11. labis98
    20210821 good!!!
  12. Amousk
    좋은강의 감사합니다.
  13. 앙냥냥
    2021.04.06 봐씁니다 ~~ @.@
  14. hanel_
    감사합니다. 21.2.19
  15. arguments라는 유사배열을 이용해 인자의 개수를 확실히 하지 않아도 함수에서 활용가능
  16. catchic
    점점 어려워지네요 ㅠㅠ 그래도 열심히 해보겠습니다 !!
  17. 주니어개발자
    잘써먹겠습니다
    감사합니답
  18. 강승
    감사합니다
  19. 박병진
    2020.10.26 완료
  20. 코딩지니어스
    20201010 완료
  21. jongki6161
    항상 감사합니다~
  22. 준식
    20200606 진행중
  23. ironia
    감사합니다~
  24. 한강
    완료했습니다. 200315
  25. 완료
  26. moleskindiary@gmail.com
    감사합니다.
  27. 굼벵이
    완료
  28. 오현주
    2019.12.19 수강
  29. 홍주호
    20191026 완료
  30. 박창신
    완료
  31. 1234
    argument[0]부터 시작해서 0,1,2,3 4개입니다

    그리고 argument.length랑 매개변수갯수는 상관없는것같네요

    함수이름.length해야 4가 나오는거구요
    대화보기
    • 토니
      하나 궁금한게. 매개변수가 갯수가 4면 argument.length는 4인데
      i<argument.length는 i<4 보다 작을때인데 그럼 4는 어떻게 합하죠???
    • fastbegin
      @slowbegin

      document.write('result1 : ' + sum(1,2,3,4));
      document.write('<br/>');
      document.write('result1 : ' + sum(1,2,3,4,5,6));
      이렇게 코드 고쳐보시면 코드 잘짜셨다는걸 확인하실 수 있습니다.
    • 용돌
      0 : 1
      1 : 2
      2 : 3
      3 : 4
      result1 : 10까지 일단 출력이되고,
      엔터(<br />없이 다음번 0:1이 출력된거네요.
      대화보기
      • slowbegin
        for문을 한 번 더 사용해서
        document.write('result1 : ' + sum(1,2,3,4,5,6));
        위 코딩을 하나 더 했습니다
        그랬더니 결과값이 의도했던 것과 다르게 나옵니다...
        ①document.write('result1 : ' +sum(1,2,3,4));
        -> 0 : 1
        1 : 2
        2 : 3
        3 : 4
        result1 : 100 : 1

        ②document.write('result2 : ' +sum(1,2,3,4,5,6));
        -> 1 : 2
        2 : 3
        3 : 4
        4 : 5
        5 : 6
        result1 : 21

        ①의 result에 해당하는 값이 왜 10이 아니라 100이 나오는건가요 ㅠ
        대략 arguments.length가 1개인데
        length를 결정짓는 배열이 2개
        sum(1,2,3,4)
        sum(1,2,3,4,5,6)
        이렇게 2개라서 오류값이 나오는것 같습니다만
        정확히를 모르겠네요 ㅠ


        밑에건 제가 작성한 코딩 원본입니다
        <!DOCTYPE html>
        <html>
        <head>
        <title></title>
        </head>
        <body>
        <script type="text/javascript">
        function sum(){
        var i, _sum = 0;
        for(i=0; i<arguments.length; i++){
        document.write(i+' : '+arguments[i]+'<br />');
        _sum += arguments[i];
        }
        return _sum;
        }
        document.write('result1 : ' + sum(1,2,3,4));
        document.write('result1 : ' + sum(1,2,3,4,5,6));
        </script>
        </body>
        </html>
      • Byungwook Kim
        잘 배우고 갑니다!!
      • 김경모
        자바스크립트만 저런 건가요?
      • 미완성
        20190109
      • leni
        arguments = 인자의 갯수
        length = 매개변수의 갯수
      • 스탐
        감사합니다
      • moon
        감사합니다~!
      • 정진주
        잘 듣고 갑니다~~!!
      • 안장호
        감사합니다~! ^^
      • 고순영
        정말...자유롭네요 ㅋㅋㅋㅋ 흑흑
      • 듀티프리
        좋아요. 감사합니다.
      • Seo Yun Seok Tudoistube
        감사합니다.
        다시 보니까 함수로 전달된 인자의 수를 구할 수도 있고, 실제로 함수에 전달된 인자의 수를 구할 수도 있네요.
        멋진 기능이네요^^
      • 율루
        argments 는 php의 __costruct랑 비슷하다고 보면되겠네요?
      • hsk772
        강의 다시 들으면 함수지향 이해할 수 있나요? 어흐흑.
      • 박인호
        12-15
        수강완료.
        감사합니다.
      • Jupi
        javascript는 참... 자유로운 존재군요 ㅎㅎ
        밑에 댓글을 보니, 다른 언어와 다른점과 비교할 수 있어서 좋습니다!
        댓글 짱짱!
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기