Javascript arguments 객체란?

Posted by 열정보이
2019. 4. 20. 17:36 Javascript

 

Java나 C언어 개발을 해보신 분들은 아시겠지만, 다음과 같은 코드는 에러를 발생합니다.

 

<script>

   function add(a,b){
        return a+b;
   }

   add(3);

</script>

 

하지만 Javascript에서는 에러가 발생하지 않습니다.

왜 그럴까요?

 

바로 arguments 객체때문이죠.

 

arguments 객체란?

arguments 객체는 '함수를 호출할 때 넘긴 인자들이 배열 형태로 저장된 객체' 를 의미합니다.

하지만 실제 배열이 아닌, 유사 배열 객체라는 점...! 

 

유사 객체 : 해당 객체의 프로퍼티중 length가 존재하나, _proto_가 가르키는 부모가 되는 객체가 Array가 아닌 객체

 

Javascript에서는 함수를 호출할 때 인수들과 함께 암묵적으로 arguments 객체가 함수 내부로 전달됩니다.

그렇기 때문에 함수를 선언할 때 명시한 인자의 개수와 함수를 호출할 때 넘겨주는 인자의 개수가 달라도 에러가 발생하지 않습니다.

 

직접 코드로 보시죠.

 

<script>

    function add(a,b){
        console.dir(arguments);
        return a+b;
    }

    console.log(add(1));
    console.log(add(1,2));
    console.log(add(1,2,3));

</script>

 

위와 같은 코드의 결과를 함께 보시죠.

 

 

arguments 객체의 모습은 마치 배열과 유사한것을 보실 수 있습니다.

length 프로퍼티에는 함수를 호출 할 때, 넘겨준 인자의 개수가 저장되어 있으며, 인자의 개수만큼 0~n 까지의 프로퍼티와 그 순서에 따른 값들이 저장된것을 보실 수 있습니다.

 

Javascript는 이러한 arguments 객체를 참조하여, 넘겨준 매개변수의 개수가 달라도 에러를 발생하지 않습니다.

이런 arguments 객체를 이용하면, 다른 '언어에 비해 좀 더 유동적으로 함수' 를 생성할 수 있겠죠?

 

<script>

    function sum(){
        var result = 0;
        console.dir(arguments);
        for(var i = 0; i < arguments.length; i++){
            result += arguments[i];
        }

        return result;
    }

    document.write(sum(1,2,3,4,5,6,7,8,9,10));

</script>

 

arguments 객체의 length 프로퍼티를 이용해 인자의 개수에 상관없이 모두 더해주는 함수를 만들 수 있습니다.

 

Javascript의 arguments에 대한 포스팅이었습니다.