JavaSript 고급 프로그래밍 - 제7장 학습노트

4065 단어

7.1 귀속

  • arguments.callee는 실행 중인 함수를 가리키는 지침으로 함수의 귀속 호출을 실현할 수 있습니다
  • function factorial(num){
             if(num <= 1){
                       return 1;
    } else {
             return num * arguments.callee(num - 1);
    }
    }
    var anotherFactorial = factorial;
    factorial = null;
    alert(anotherFactorial(4)); // output 24
    
  • 귀속 함수를 작성할 때aguments를 사용합니다.callee는 함수 이름을 사용하는 것보다 더 안전하다

  • 7.2 패키지 닫기


    일반 프런트엔드 전체 - JavaScript 클로즈업 상세 정보

    패키지 기능

  • 클러치에는 세 가지 특성이 있다
  • 함수 삽입 함수;
  • 함수 내부는 외부의 매개 변수와 변수를 인용할 수 있다(즉 함수 내부 정의는 함수 즉 외부 함수를 포함하는 활동 대상을 그 작용역 체인에 추가하는 것이다)
  • 파라미터와 변수는 쓰레기 회수 메커니즘에 의해 회수되지 않는다

  • 폐쇄의 정의 및 장단점

  • 패키지는 다른 함수 작용역의 변수에 접근할 권리가 있는 함수를 가리킨다. 패키지를 만드는 가장 흔히 볼 수 있는 방법은 한 함수 안에서 다른 함수를 만들고 다른 함수를 통해 이 함수의 국부 변수에 접근하는 것이다
  • 패킷을 닫는 단점은 메모리에 상주하여 메모리 사용량을 증가시키고 잘못 사용하면 메모리 유출을 초래하기 쉽다는 것이다
  • 패키지 폐쇄는javascript 언어의 큰 특징으로 주로 패키지 폐쇄 장소를 응용하는 것은 주로 개인적인 방법과 변수를 설계하기 위해서이다
  • 일반 함수가 실행되면 국부 활동 대상은 삭제되고 메모리에 전역 작용역만 저장됩니다.하지만 가방을 닫는 상황은 다르다

  • 중첩 함수의 패키지

    function aa(){
        var a=1;
        return function(){
           alert(a++);
        };
    }
    var fun = aaa();  
        fun();// 1   a++,, a ~  
        fun();// 2  
        fun = null;//a !
    

    패키지를 닫으면 변수가 항상 메모리에 저장되고 사용하지 않으면 메모리 소모가 증가합니다.

    javascript의 쓰레기 회수 원리

  • javascript에서 만약에 한 대상이 더 이상 인용되지 않는다면 이 대상은 GC에 회수될 것이다
  • 만약 두 대상이 서로 인용되고 더 이상 제3자에게 인용되지 않는다면 이 두 대상이 서로 인용된 대상도 회수될 것이다..

  • 패키지 사용의 이점

  • 변수가 메모리에 장기적으로 주둔하기를 바랍니다
  • 전체 변수의 오염을 피한다
  • 개인 변수에 접근하는 공유 방법을 만듭니다

  • ==== 글로벌 변수의 누적 ===

    var a = 1;
    function abc(){
        a++;
        alert(a);
    }
    abc();              //2
    abc();            //3
    

    == 로컬 변수 ==

    function abc(){
            var a = 1;
            a++;
            alert(a);
    }
    abc();                       //2
    abc();                    //2
    

    그러면 어떻게 해야만 변수 a가 국부 변수이자 누적될 수 있습니까?

    국부 변수의 누적

    function outer(){
            var x=10;
            return function(){  // 
                x++;
                alert(x);
            }
    }
    var y = outer();              // y;
    y();                 //y , 11, outer()();
    y();                //y , 12, 
    

    모듈화 코드, 전역 변수 오염 감소

    function aa(cout){
        for(var i=0;i

    예를 들어 for순환을 정의했다. 블록급 작용역이 있는 언어에서 순환이 끝나면 i는 삭제되지만 js, 변수 i는 aa()의 활동 대상에 정의되어 함수 내부 곳곳에서 접근한다.
    function aa(count){
        (function(){
        // 
            for(var i=0;i

    위에서 언급한 바와 같이 for순환 외부에 개인 작용역을 삽입하여 익명 함수에 정의된 모든 변수는 실행이 끝난 후에 삭제됩니다.
    개인 작용역을 창설함으로써 모든 개발자는 자신의 변수를 사용할 수 있을 뿐만 아니라 전체 작용역을 혼란시킬 염려도 없다.예:
    (function(){
        var now=new Date();
        if(now.getMonth()==0&&now.getDate()==1){
            alert("Happy new year");
        }
        
    })();
    

    개인 변수:


    함수에 정의된 모든 변수는 개인 변수라고 할 수 있다.함수 외부에서는 이 변수에 접근할 수 없기 때문이다.사유 변수와 사유 함수에 접근할 권리가 있는 공유 방법을 특권 방법이라고 한다.
    function MyObject(){
             // 
             var privateVariable = 10;
             function privateFunction(){
                       return false;
             }
             // 
             this.publicMethod = function(){
                       privateVariable ++;
                       return privateFunction();
             }
    }
    

    정적 개인 변수

    (function(){
             var privateVariable = 10;
             function privateFunction(){
                       
             }
             Myobject = function(){               
             }
    // / 
             Myobject.prototype.publicMethod = function(){
                       privateVariable ++;
                       return privateFunction();
             }
    })()
    

    이 모델은 개인 작용역을 만들고 그 중에서 구조 함수와 상응하는 방법을 봉인했다.

    this 대상:this 대상은 실행할 때 함수를 기반으로 하는 실행 환경에 귀속됩니다. 전역 함수에서this는 윈도우와 같고, 함수가 특정한 대상의 방법으로 호출될 때this는 그 대상과 같습니다.그러나 익명 함수의 실행 환경은 전역적이기 때문에 대상은 보통 윈도우를 가리킨다.

    좋은 웹페이지 즐겨찾기