Javascript arguments 객체란?
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에 대한 포스팅이었습니다.
'Javascript' 카테고리의 다른 글
[Javascript] || 와 && 를 이용한 라인 줄이기 (0) | 2019.07.09 |
---|---|
[Javascript] 헷갈리는 === 과 == (0) | 2019.07.09 |
Javascript에서의 this part 2 (0) | 2019.07.01 |
Javascript에서의 this (0) | 2019.04.20 |
함수 호이스팅(Function Hoisting)이란? + 변수 호이스팅 (0) | 2019.04.13 |