JavaScript 테마 (2) 내 눈 에 보 이 는 패키지

5463 단어
나 는 인터넷 의 많은 블 로 그 를 보고 나 서 야 폐쇄 의 의 미 를 이해 하 는 데 오 랜 시간 이 걸 렸 다.나 는 다음 과 같은 몇 가지 로 나 누 어 폐쇄 를 말한다.
  • 내 려 다 보고 닫 기 --- 간단 한 놀이 (방법론) 를 선택 하면 다 보고 갈 수 있다
  • 변수의 일생 - 변수의 소각 과 생존 시간
  • 익명 함수 --- - 작은 투명 이 아 닌 작은 투명
  • 폐쇄 함정 --- 만 용의 예
  • 폐쇄 - 그 역할 을 살 펴 보면 전체 JS 의 함수 세 계 는 폐쇄 적 입 니까?
  • 가방 을 자세히 보 세 요 - 저 는 이 절 을 보지 않 습 니 다!(건 너 뛰 는 것 을 환영 하지만 여유 가 있 으 면 와 서 보 세 요. 서화 이정)
  • 패 킷 을 닫 는 것 을 피하 십시오 - 메모리 점용 또는 사용 하고 싶 지 않 습 니 다 (제멋대로)!너 정말 못 써?가끔 그래 요
  • 1. 내 려 다 보 며 닫 기:
    코드 를 쓰 는 척:
                ,     ,        ,    0 1;
                ,     ,       ,   abcd;
                ,     ,        JS???        ?
    

    패키지 정의:
    패 킷 닫 기 는 다른 함수 역할 영역 에 접근 할 수 있 는 변 수 를 말 합 니 다.
    오늘 은 함수 내부 가 어떻게 작 동 하 는 지 모 르 겠 습 니 다. 함수 에 봉인 되 어 문법 에 의 해 정의 되 었 습 니 다. 저 는 toString () 이 문자열 을 되 돌려 주 는 것 이라는 것 만 알 면 됩 니 다.이것 은 사실 폐쇄 적 인 것 이다.
    나 는 내 가 어떤 방식 으로 정 보 를 얻 을 수 있다 는 것 만 알 면 된다.이런 방식 은 폐쇄 다.
    function     (){           //   
      var       =xxx;
      return function     (      ){
                    xxx,        ;
     }
    }
    var       =    ();
          (      );          
    //   ,     (      )xxx,     (  )      
    

    C + + 또는 비슷 한 언어 를 배 운 적 이 있 는 사람 은 이런 개인 변수 와 비슷 하 다 는 것 을 알 수 있 습 니 다. 그 렇 죠?우 리 는 인터페이스 함수 로 가 져 올 수 있 지만 직접 가 져 올 수 는 없다.
    (1) 패 킷 을 닫 는 것 은 디자인 원칙 으로 문맥 을 분석 함으로써 사용자 의 호출 을 간소화 하고 사용자 가 모 르 는 상황 에서 그의 목적 을 달성 하도록 한다.(2) 인터넷 주류 의 패 킷 분석 글 은 실제 적 으로 패 킷 원칙 과 반대 되 는 것 이다. 패 킷 디 테 일 을 알 아야 잘 사용 할 수 있다 면 이 패 킷 은 디자인 에 실패 한 것 이다.(3) 되도록 공 부 를 적 게 해라.http://kb.cnblogs.com/page/110782/
    사실 우 리 는 두 가지 측면 에서 볼 수 있다.a. 디자이너 의 측면 에서 볼 때 사용 자 는 데 이 터 를 직접 얻 을 수 없다. 사실은 데이터 의 개인 을 실현 한 것 이다.b. 사용자 의 측면 에서 볼 때 사용 자 는 다른 방식 (이 방식 은 더욱 간단 하고 편리 할 수 있 으 며 구체 적 으로 디자이너 에 따라 정 해진 것) 을 통 해 데 이 터 를 얻 거나 심지어 봉 인 된 데 이 터 를 조작 할 수 있다.
    END. 계속 배우 고 싶 으 면 아래 를 보 세 요.
    2. 변수의 일생:
  • JS 세계 에서 이러한 청결 원칙 이 있 으 면 환경 에서 접근 할 수 없 는 변 수 는 삭 제 됩 니 다.모두 에 게 잊 혀 진 사람 처럼 모두 가 그 가 죽 었 다 고 생각한다.
  • JS 에는 두 가지 변수 가 있 는데 하 나 는 전역 변수 이 고 하 나 는 국부 변수 이다.부분 변 수 는 소속 공간 에 붙 어 있 는 것 으로 소속 공간 이 없 으 면 먼지 가 날 리 고 연기 가 꺼진다.전역 변 수 는 js 파일 이 사용 하 는 주기 입 니 다.

  • 따라서 변 수 를 없 애 려 면 전역 변수 라면 덮어 써 야 합 니 다. 부분 변수 라면 그 방법 이 끝 날 때 까지 기다 리 면 자동 으로 삭 제 됩 니 다.function test(){var a=3;}
        alert(a);   //error,a       
        for(var a=3;a<10;a++){}
        alert(a);  //   10,  a      ,      
    
  • 그러나 가방 을 닫 는 것 은 특수 한 상황 이다.패 킷 에 있 는 변 수 는 이 함수 의 공간 이 메모리 에 계속 남아 있 습 니 다.
      function test(){
          var a=3;
          return function(){
              return a;
          }
      }
          b=test();
    

  • 외부 에서 a 를 출력 할 수 없습니다. 접근 할 수 없 기 때 문 이지 만 a 는 메모리 에 존재 합 니 다.내부 함수 가 외부 변수 a (인용 계수 법 쓰레기 제거, 0 이면 삭제) 를 인용 하기 때문에 a 는 아직도 걱정 되 고 자 연 스 럽 게 사라 지지 않 습 니 다.
    3. 익명 함수:
  • 무엇이 비 익명 함수 입 니까?

  • function I_have_name(){//do something}   
     //         ,         "I_have_name"
    function (){//do something}              
     //      ,       
    
  • 무엇이 또 자체 집행 함수 입 니까?
  • (function (){
    alert(3);
    })();               //        
    (function auto(){
    alert(3);
    })();             //        ,    
                        //      auto    ?(         )
    //--------------------------------------------------
    //       ,     
    function(){
    alert(3);
    }();                //      !!!!!!!!!!!!!!
    

    왜 (function {/ code}) ();실행 할 수 있 습 니 다. function {/ code} ();잘못 보고 할 까?답: 1. 우 리 는 그들의 차 이 를 보 았 습 니 다. 사실은 전 자 는 함수 성명 이 라 고 부 르 고 후 자 는 함수 표현 식 이 라 고 부 릅 니 다.2. JS 의 사전 컴 파일 할 때 함수 설명 을 먼저 보고 함수 표현 식 을 무시 합 니 다.성명 에 뒷문 을 열 어 준 것 처럼.3. JS 가 정식으로 컴 파일 되 었 을 때 명 시 된 함 수 는 (function {/ code} 을 보고 건 너 뛰 었 습 니 다. 컴 파일 되 었 기 때문에 () 이것 만 볼 수 있 습 니 다.
    !function(){}()              (function(){})()    
    ~function(){}()      void function(){}()
    

    6. 자체 실행 함 수 는 인 자 를 가 져 올 수 있 습 니 다. 형식 은 이 렇 습 니 다!
    function(num){
    alert(num);
    }(3);                    3
    

    4. 폐쇄 함정
    그리고 우 리 는 흔히 볼 수 있 는 폐쇄 사례 를 말 하 는데 이것 은 폐쇄 적 인 부작용 이다.
    var arr=[1,2,3];
      var obj={};
      var test=function(){
          for(var i=0;i

    정상 적 인 사고 에 따 르 면 마지막 으로 obj [0] = 0, obj [1] = 1, obj [2] = 2 여야 하지만 진정한 과정 은 이렇다.
  • object [i] 의 함수 역 에서 i 를 출력 해 야 하기 때문에 자신의 공간 에 i 가 없어 서 바깥쪽 으로 찾 았 습 니 다. 바깥쪽 에서 i 를 찾 았 습 니 다. 바깥쪽 에 있 는 이 i 는 외곽 함수 에 저 장 된 것 입 니 다.
  • 다음은 관건 입 니 다. 바깥쪽 의 이 함 수 는 하나의 대상 이 죠? (모든 함 수 는 하나의 대상 입 니 다) 우리 가 방문 한 것 은 바로 이 대상 의 i 입 니 다. 이 대상 에 저 장 된 i 는 변수의 주소 이 고 최종 적 으로 10 으로 저 장 됩 니 다.
  • 그래서 우리 의 해결 방법 은 obj [i] 안의 i 와 마찬가지 로 두 함수 간 의 소통 기 회 를 만들어 실시 간 으로 값 에 따라 전달 하 는 것 이다.
  • 
    var test=function(){
          for(var i=0;i

    위 에 있 는 것 을 알 게 되면 알 게 될 것 입 니 다. 네! 저 는 익명 함 수 를 사 용 했 습 니 다! 매개 변수 가 있 는 익명 함 수 를 사 용 했 습 니 다. 여기 (i) 는 외곽 지역 에 있 습 니 다. obj [i] 에서 i 와 똑 같 습 니 다. 내부 함수 로 서 canshu 에 할당 되 었 습 니 다. 그래서 즉시 값 에 따라 전 달 됩 니 다!!(PS: 자신 이 발명 한 단 어 는 참고 만 하 세 요. 중요 한 문 제 는 밑바닥 이 어떻게 돌아 가 는 지 모 르 겠 습 니 다. 인용 이 라 고 하면 서도 이상 하 다 고 생각 합 니 다)
    이 과정의 실현 도 폐쇄 가 가 져 온 함정 을 피 하 는 데 성공 했다.
    5. 가방 닫 기 살 펴 보기:
    사실 우 리 는 심지어 전체 환경 에서 쓴 function 은 모두 폐쇄 적 이 라 고 말 할 수 있다.
    참고 문헌 1. 슈퍼 추천 글 2. 폐쇄 가 무엇 인지, 폐쇄 의 장단 점 3. 자바 script 폐쇄 - 알 겠 느 냐 못 알 겠 느 냐 는 너 에 게 달 려 있다. 어쨌든 나 는 알 겠 다 4. 익명 함수 분석

    좋은 웹페이지 즐겨찾기