arguments,arguments를 분명히 하다.callee、arguments.caller의 관계와 차이.md

3269 단어

arguments、arguments.callee、arguments.caller의 관계와 차이


고등학교 3학년 강좌를 볼 때(P177) 코드에arguments가 쓰였다.callee는 함수를 자생적으로 호출합니다. 책에서 "실행 중인 함수를 가리키는 바늘로 함수에 대한 귀속 호출을 실현할 수 있습니다."라고 설명했습니다.
이 반복 호출 코드는 다음과 같습니다.
function factorial (num) {
            if (num <= 1) {
                return 1;
            } else {
                return num * arguments.callee(num - 1);
            }
        }

        var num =  factorial(10);
        console.log(num); // => 3628800

아주 간단한 코드입니다.그래서 자신 은 지식 을 분명히 하기 위해 자신 의 JS 기초 를 강화하기 위해 스스로 문서 를 찾아보았다

  • arguments
  • arguments.callee
  • arguments.caller

  • 삼자의 관계와 차이점:


    arguments:


    함수를 호출할 때, 자동으로 이 함수 내부에arguments라는 숨겨진 대상을 생성합니다.이 대상은 수조와 유사하지만 수조도 아니다.[] 조작부호를 사용하여 함수 호출 시 전달되는 실참을 얻을 수 있습니다.
    arguments 객체는 Array가 아닙니다.그것은 수조와 유사하지만 길이를 제외하고는 수조 속성이 없습니다.맞아, 얘는 대상이야!그리고 그것이 저장하는 것은 실제 함수에 전달되는 매개 변수이다
      function obj(){
                   //  instanceof  arguments
                   console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) ); // => false
                   console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) ); // => true
                   console.log(arguments); // => []           callee
               }
               obj();
    
    (function () {  
        alert(arguments instanceof Array); // => false  
        alert(typeof(arguments)); // => object  
    })();  
    

    By The Way:
    typeof는 일원 연산자입니다. 반환값은 문자열입니다. 이 문자열은 연산수의 데이터 형식을 설명하고 연산수의 데이터 형식을 가져오는 데 사용됩니다.되돌아오는 값은number,boolean,undefined,function,object,string
    instanceof는 변수가 대상인지 아닌지를 판단하는 데 사용되며, 반환값은true 또는false입니다
    다음에 우리는 위의 코드를 수정하여obj 함수를 호출할 때 매개 변수를 전달하지만obj 함수 자체는 매개 변수가 없다.
    function obj(){
                   console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) );
                   console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) );
                   console.log(arguments);
               }
               // obj    
               obj('monkey','love',24); 
               // => [3]
               // 0: "monkey"
               // 1: "love"
               // 2: "24"
    

    그래서 우리는 왜arguments가 함수에 저장된 실제 전달 매개 변수이지 함수가 설명하는 매개 변수가 아니라고 말한다.
    함수가 호출될 때만 arguments 대상이 생성되며, 호출되지 않을 때는null입니다.

    캐럴러는?


    한 함수 A가 다른 함수 B를 호출할 때 호출된 함수 B는 자동으로 콜러 속성을 생성하여 호출된 함수 대상인 함수 A를 가리킨다.함수 A가 현재 호출되지 않으면 caller는null입니다.
    function testCaller() {  
        var caller = testCaller.caller;  
        alert(caller);  
    }  
      
    function aCaller() {  
        testCaller();  
    }  
      
    aCaller();  
    //        =>  function aCaller() {  
               //          testCaller();  
              //          }        
    

    콜렉션은?


    callee는arguments 대상의 구성원입니다. 값은 '실행 중인 Function 대상' 입니다.첫 번째 데모 코드가 보여준 것처럼.
    function aCallee(arg) {  
      alert(arguments.callee);  
    }  
      
    function aCaller(arg1, arg2) {
        aCallee();
    }  
      
    aCaller();  
    //         =>   function aCallee(arg) {  
           //                  alert(arguments.callee);  
            //              }  
    

    좋은 웹페이지 즐겨찾기