>  기사  >  웹 프론트엔드  >  JavaScript 인수 객체

JavaScript 인수 객체

黄舟
黄舟원래의
2016-12-13 09:18:12867검색

1. JavaScript에서 인수 객체는 실제로 현재 함수의 내장 속성입니다. 인수는 Array와 매우 유사하지만 실제로는 Array 인스턴스가 아닙니다. 이는 다음 코드로 확인할 수 있습니다(물론 실제로 funcArg 함수에서는 인수 호출 시 funcArg.arguments를 작성할 필요가 없으며 인수를 직접 작성하면 됩니다).

Array.prototype.testArg = "test";
function funcArg() {
    alert(funcArg.arguments.testArg);  
    alert(funcArg.arguments[0]);
}

alert(new Array().testArg); // result: "test"
funcArg(10);                // result: "undefined"  "10"

2. 인수 객체의 길이는 형식 매개변수의 개수가 아닌 실제 매개변수의 개수에 따라 결정됩니다. 형식 매개변수는 함수 내의 메모리 공간에서 다시 열리지만 인수 객체의 메모리 공간과 겹치지 않는 변수입니다. 인수와 값이 모두 존재하는 경우에는 두 값이 동기화되지만, 그 중 하나에 값이 없으면 이 값이 없는 경우에는 값이 동기화되지 않습니다. 다음 코드를 확인할 수 있습니다.

function f(a, b, c){
    alert(arguments.length);   // result: "2"
    a = 100;
    alert(arguments[0]);       // result: "100"
    arguments[0] = "qqyumidi";
    alert(a);                  // result: "qqyumidi"
    alert(c);                  // result: "undefined"
    c = 2012;
    alert(arguments[2]);       // result: "undefined"
}

f(1, 2);

3. JavaScript의 함수 선언 및 호출 특성을 보면 JavaScript의 함수는 Overload가 불가능하다는 것을 알 수 있습니다.

다른 언어의 오버로딩 기준에 따르면 "함수 반환 값이 다르거나 형식 매개변수의 개수가 다릅니다"라는 결론을 내릴 수 있습니다.

첫 번째: 선언

두 번째: 엄밀히 말하면 JavaScript의 형식 매개변수 수는 함수의 변수 연산을 용이하게 하기 위한 것입니다. 실제로 실제 매개변수는 이미 인수에 저장되어 있습니다. 물체.

또한 JavaScript의 함수가 JavaScript 함수 자체에서 오버로드될 수 없는 이유를 깊이 이해해 보겠습니다. JavaScript에서 함수는 실제로 객체이고 함수 이름은 함수에 대한 참조이거나 함수 이름 자체가 변수. 아래 표시된 함수 선언과 함수 표현식의 경우 실제 의미는 위와 동일합니다(함수 선언과 함수 표현식의 차이점을 고려하지 않음). 이는 JavaScript의 함수가 오버로드될 수 없다는 특징을 이해하는 데 매우 도움이 됩니다.

function f(a){
    return a + 10;
}

function f(a){
    return a - 10;
}

// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下

var f = function(a){
    return a + 10;
}

var f = function(a){
    return a - 10;
}

4. 인수 객체에는 매우 유용한 속성인 callee가 있습니다. Argument.callee는 이 인수 개체가 있는 현재 함수 참조를 반환합니다. 재귀 함수 호출을 사용할 때는 함수 이름 자체 대신 Arguments.callee를 사용하는 것이 좋습니다.

은 다음과 같습니다.

function count(a){
    if(a==1){
        return 1;
    } 
    return a + arguments.callee(--a);
}

var mm = count(10);
alert(mm);


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.