JavaScript 함수 내부 속성: arguments. callee, arguments. caller, caller

2519 단어 전단
JavaScript 의 함수 내부 에 특수 한 대상 이 있 습 니 다. 그것 은 arguments 입 니 다. 이것 은 클래스 배열 대상 (arguments 대상 은 배열 과 유사 할 뿐 Array 의 인 스 턴 스 가 아 닙 니 다) 입 니 다. 함수 에 들 어 오 는 모든 인 자 를 포함 하고 있 습 니 다. 다음은 간단 한 예 를 보 겠 습 니 다.
function f() {
    for(var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
}

f(1,"string",true); //            
/*
1
string
true
*/

arguments 대상 에는 함수 에 전달 되 는 매개 변수 가 저장 되 어 있 으 며, 괄호 문법 을 통 해 해당 하 는 매개 변 수 를 방문 할 수 있 으 며, arguments 대상 의 length 속성 은 함수 에 전달 되 는 매개 변수의 수량 을 저장 하고 있 으 므 로 함수 에 전달 되 는 매개 변 수 를 간단하게 옮 겨 다 닐 수 있 음 을 알 수 있 습 니 다.
arguments 대상 은 length 속성 외 에 도 callee 라 는 속성 이 있 습 니 다. 이 속성 은 포인터 입 니 다. 이 arguments 대상 을 가 진 함 수 를 가리 키 며 약간 돌아 갈 수 있 습 니 다. 하지만 아래 의 예 를 보면 알 수 있 습 니 다.
function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * factorial(num - 1);
    }
}

function factorial_callee(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1);
    }
}
//            

factorial(5); // 120
factorial_callee(5); // 120

상기 두 함 수 는 모두 재 귀적 인 방식 으로 계승 기능 을 실현 합 니 다. 첫 번 째 함 수 는 함수 명 을 통 해 자신 을 호출 하고 두 번 째 함 수 는 arguments. callee 를 통 해 자신 을 호출 합 니 다. 그 중에서 arguments. callee 는 arguments 대상 이 속 한 함수 의 함수 명 에 해당 하 는 것 을 알 수 있 을 것 이 라 고 믿 습 니 다.
JavaScript 함수 에는 또 다른 속성 이 정의 되 어 있 습 니 다. caller, 이 속성 에는 현재 함 수 를 호출 하 는 함수 의 인용 이 저장 되 어 있 습 니 다. 즉, 현재 함 수 를 호출 하 는 함 수 를 가리 키 는 지침 입 니 다. 전역 작용 영역 에서 현재 함 수 를 호출 하 는 경우 값 은 null 입 니 다. 마찬가지 로 우 리 는 하나의 예 를 통 해 어떻게 작 동 하 는 지 알 수 있 습 니 다.
function f() {
    console.log(f.caller);
}
//            
f();
// null


function outer() {
    console.log("outer");
    inner();
}

function inner() {
    console.log("inner");
    console.log(inner.caller);
}

//            
outer();
/*
outer
inner
outer() {
    console.log("outer");
    inner();
}
*/

첫 번 째 는 전역 작용 역 에서 f 함 수 를 호출 하 는 것 이기 때문에 f. caler 의 값 은 null 입 니 다.두 번 째 는 outer 함수 에서 inner 함 수 를 호출 하 는 것 이기 때문에 inner. caller 는 outer 를 가리 키 는 지침 입 니 다.
ECMAScript 5 에 서 는 arguments. caller 속성 도 정 의 했 지만 엄격 하지 않 은 모드 에서 이 속성 은 undefined 입 니 다.또한 엄격 한 모드 에서 arguments. callee 와 arguments. caller 를 방문 하면 오류 가 발생 할 수 있 습 니 다.
이상 은 JavaScript 함수 내부 속성 arguments. callee, arguments. caller, caller 에 대한 간단 한 소개 입 니 다. 이러한 속성 을 어떻게 잘 사용 하여 독특한 역할 을 발휘 하 는 지 에 대해 서 는 독자 가 자신의 지혜 를 발휘 해 야 합 니 다.
수준 에 한계 가 있 으 니 잘못 이 있 으 면 비판 하고 바로잡아 주 십시오.

좋은 웹페이지 즐겨찾기