Javascript
Argument(매개변수)에 대하여
뮹뭉묵목몽묭
2019. 7. 17. 20:34
javascript 함수는 매개변수를 가진다. 매개변수가 함수 선언 시 작성되는 변수라면, 전달 인자는 함수가 호출될때 전달되는 값이다. 자바스크립트는 전달 인자의 개수와 매개변수의 개수가 달라도 에러를 발생시키지 않는다.
그래서 매개변수와 무관하게 함수 호출 시 더 많은 인자를 전달할 수 있다.
매개변수외에 함수에서만 사용 가능한 특별한 객체를 제공하는데 그것이 바로 Argument 객체이다.
1
2
3
4
5
6
7
8
9
10
11
|
function sum() {
var total = 0;
for (var i=0; i<arguments.length;i++) {
total += arguments[i];
}
console.log(arguments instanceof Array);
return total;
}
var sumOf1to3 = sum(1,2,3);
console.log(sumOf1to3);
|
cs |
sum의 함수를 정의 하면서 내부에 arguments 객체를 통해 전달된 인자의 합을 반환한다. arguments는 배열과 비슷하게 인덱스를 통해 접근할수가 있다. 하지만 length 속성 외에는 배열의 어떠한 속성과 매서드를 가지고 있지는 않다. (이점을 주의) 6번 라인을 보면 arguments의 객체가 배열이 아닌것을 알수있다.
또다른 예시다.
1
2
3
4
5
6
7
|
function testArg() {
var newArr = Array.prototype.slice.call(arguments);
console.log(newArr);
console.log(newArr.indexOf('b'));
console.log(arguments.indexOf('b'));
}
testArg('a','b');
|
cs |
2라인에서 argument 객체를 배열로 바꾸기 위해 프로토타입에 정의된 slice메소드를 호출한다. 이렇게 하면 arguments 객체의 요소들을 복사한 배열이 만들어진다. 4번에서는 newArr은 인덱스를 반환한다. 5번의 경우 arguments는 배열이 아니기때문에 인덱스를 반환하지 않는다.