arguments 객체: function안에 있는 너, 누가 선언했니?

arguments객체: 실행 컨텍스트 생성 시점에 만들어지다
arguments 객체는 실행 컨텍스트 생성 시점에 함께 만드는 정보 중 하나다. 지정한 매개변수의 개수와 무관하게 호출 시 인자가 모두 arguments 정보에 담긴다. 이러한 특성 덕에 함수의 자율성을 높이는 측면에서 자주 사용한다. arguments는 유사배열 객체이기 때문에 배열처럼 활용하기 위해선 별도의 처리가 필요하다. 또 함수 내부에서 매개변수의 값을 바꾸면 arguments의 값도 바뀌는데, 이는 전달된 인자를 모두 저장한 데이터라는 본래의 개념과 달라지게 된다. 이 때문에 ES6에서는 나머지 파라미터(rest parameter aka ...)가 등장하여 argumetns를 대체하고 있다.
1. 인자 개수와 무관하게, 유연하게 처리할 수 있다.
function add() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return console.log(sum);
}
add(100, 200, 300); // 600
add(10, 20, 30, 40); // 100
arguments객체를 아용하면 매개변수를 정해놓지 않아도, 유연하게 처리할 수 있다.
2. 함수 호출 시, arguments 객체가 암묵적으로 전달된다.
function argu() {
console.dir(arguments);
}
argu();
argu(1, 2);
실행결과

-
arguments 객체는 유사배열객체다.
-
유사배열객체란, 배열과 비슷하게 같이 생긴 객체를 말한다.
-
arguments 객체는 key가 0,1,2...인 숫자, length가 요소의 개수를 갖고 있다.
-
key가 0,1,2로 시작하기 때문에 arguments[0]로도 value를 접근할 수 있어, 배열과 비슷하다고 불린다.
-
3. 인자의 개수가 부족할 경우, 초과할 경우
function print(arg1, arg2) {
console.log(arg1, arg2)
}
add() // undefined undefined
add(1) // 1 undefined
add(1,2) // 1 2
add(1,2,3) // 1 2
-
argument를 부족하게 호출할 경우, undefined를 출력한다.
-
argument를 초과해서 호출할 경우, 무시한다.