Programming/JavaScript

arguments

잇나우 2019. 12. 16. 16:08
반응형

arguments

함수 안에서 함수의 여러가지 정보를 담고있는 (특히나 인자에 관련된) 객체, 사용방법이 배열과 유사하다. 유사배열이라고도 한다.

매개변수(parameter)와 인자(arguments)의 차이

function a(arg){          // arg를 매개변수
	실행시킬 코드
}

a(1);					// 1을 인자라고 한다.

매개변수는 변수이고 그 변수에 들어가는 값을 인자라고 하는데 엄격하게 구분하지 않는 경우가 많이 있다.

 

function sum(){
    var _sum = 0;    
    for(var 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이란 함수에 매개변수는 없지만 마지막 행과 같이 매개변수가 없어도 여러개의 인자를 지정할 수 있다. 코드내에서 arguments라는 것은 약속된 특수한 이름의 변수명이고 유사배열이 담겨져있다. 저 안에는 사용자가 지정한 인자가 담겨져 있다. sum(1, 2, 3, 4)의 1,2,3,4를 담고 있다. arguments는 사용자가 지정한 인자들에 접근할 수 있는 기능을 제공한다. arguments.length라고하면 sum이라고 하는 함수로 전달된 인자가 몇개인지를 알 수 있다. arguments[] 대괄호안에 인덱스 값을 주고 있다. arguments[0]은 함수로 전달된 첫번째 인자를 알아낼 수 있다.(값은 1) 이러한 특성에 반복문을 결합하면 함수로 전달된 인자의 값을 순차적으로 가져올 수 있다. 위 코드는 그 값을 더해서 리턴하면 인자로 전달된 값의 총합을 구하는 코드이다.

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

arguments.length는 함수로 전달된 실제 인자의 수를 의미하고,

함수.length는 함수에 정의된 인자의 수를 의미한다.

function zero(){
    console.log(
        'zero.length', zero.length,
        'arguments', arguments.length
    );
}
zero(); // zero.length 0 arguments.length 0 

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

function two(arg1, arg2){
    console.log(
        'two.length', two.length,
        'arguments', arguments.length
    );
}
two('val1');  // two.length 2 arguments.length 1
반응형

'Programming > JavaScript' 카테고리의 다른 글

생성자와 new  (0) 2019.12.17
함수의 호출 apply  (0) 2019.12.16
클로저(closure)  (0) 2019.12.15
유효범위(Scope)  (0) 2019.12.14
객체  (0) 2019.12.14