javascript

arguments

J_estrella 2017. 12. 5. 00:56

arguments는 배열처럼 보이지만 배열은 아닌 함수의 지역변수이다. 

함수가 실행되면 arguments가 생성된다. 




function a(){
    console.log(arguments);

    console.log(arguements.length);

}

a(1,2,3,4); //[ 1,2,3,4, callee: ƒ, Symbol(Symbol.iterator): ƒ ]  , 4

a(); // [callee: ƒ, Symbol(Symbol.iterator): ƒ] , 0


arguments는 배열은 아니지만 length 프로퍼티를 가지고 있는 object다. 


따라서 arguments는 pop메소드를 가지고 있지 않다. 그러나 array처럼 만들어줄 수 있다. 


var args = [ ...arguments];
console.log(args);

}

a(1,2,3,4); // [1,2,3,4];



위와 같이 es6문법에서 등장한 전개 연산자를 이용해서 배열로 만들어줄 수 있고,

var args = Array.prototype.slice.call(arguments);

console.log(args);

}
a(1,2,3); //[1,2,3];


slice메소드로 배열로 만들어줄 수 있다.

그러나 자바스크립트엔진 최적화에 있어서 기피된다. 


arguments 속성으로는

arguments.callee : 현재 실행중인 함수를 가리킨다.
arguments.caller : 현재 실행중인 함수를 호출한 함수를 가리킨다.
arguments.length가 있다.