Javascript 학습노트의 함수 편(4):arguments 대상
배열로 변환
다음 코드는arguments 대상의 모든 요소를 포함하는 그룹을 되돌려줍니다.
Array.prototype.slice.call(arguments); 전환 속도가 매우 느리기 때문에 성능 요구가 엄격한 프로그램에서는 이렇게 하는 것을 권장하지 않는다.
전달 매개 변수
다음은 비교적 추천하는 방법으로arguments 대상을 한 함수에서 다른 함수로 전달하는 것이다.
function foo() {
bar.apply(null, arguments);
}
function bar(a, b, c) {
// do stuff here
}
또 하나의 교묘한 방법은 콜과 apply를 동시에 사용하여 묶음을 풀 수 있는 외부 방법을 신속하게 만드는 것이다.
function Foo() {}
Foo.prototype.method = function(a, b, c) {
console.log(this, a, b, c);
};
// Create an unbound version of "method"
// It takes the parameters: this, arg1, arg2...argN
Foo.method = function() {
// Result: Foo.prototype.method.call(this, arg1, arg2... argN)
Function.call.apply(Foo.prototype.method, arguments);
};
함수형 참조와arguments 속성의 관계
arguments 대상은 자신의 속성과 함수의 인삼을 위해 Getter와setter 방법을 만들었습니다.따라서 함수의 형상을 수정하면 대응하는arguments 대상의 속성 값에 영향을 주고 반대로도 마찬가지다.
function foo(a, b, c) {
arguments[0] = 2;
a; // 2
b = 4;
arguments[1]; // 4
var d = c;
d = 9;
c; // 3
}
foo(1, 2, 3);
성능 문제
arguments는 두 가지 상황에서만 생성되지 않습니다. 하나는 함수 내부에서 국부 변수로 성명되고, 다른 하나는 함수의 형삼으로 간주됩니다.다른 경우,arguments 대상은 항상 생성됩니다.Getter와setter 방법은 항상 ARguments 대상이 생성됨에 따라 만들어지기 때문에 ARguments를 사용하는 것은 성능 자체에 거의 영향을 주지 않습니다.그러나 Javascript의 성능에 심각한 영향을 줄 수 있는 상황은 바로arguments를 사용하는 것이다.callee.
function foo() {
arguments.callee; // do something with this function object
arguments.callee.caller; // and the calling function object
}
function bigLoop() {
for(var i = 0; i < 100000; i++) {
foo(); // Would normally be inlined...
}
}
상기 코드에서 foo 함수는 더 이상 간단한 내연 확장이 아니다. 왜냐하면 그 자체와 호출자 (caller) 를 알아야 하기 때문이다.이것은 내연 확장이 가져오는 성능 향상을 상쇄할 뿐만 아니라 함수의 봉인성을 파괴한다. 함수 자체가 특정한 호출 배경에 의존해야 하기 때문이다.그러므로 가능한 한 arguments를 사용하지 않는 것을 권장합니다.callee.
이상은 Javascript arguments 대상에 대한 전부입니다. 어린 친구들은 철저하게 알고 있습니까? 간단하게 말하면
arguments는 함수의 매개 변수 대상(실제 전송된 매개 변수를 가리킨다)arguments.length는 함수의 매개 변수 대상의 길이를 가리키는arguments[i]는 i번째 매개 변수의 값을 가리킨다(첫 번째는 0)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.