JavaScript 의 왜냐하면...

5315 단어
여러분, 건물 주가 블 로 그 를 몇 편 쓰기 시 작 했 는데 이것 은 이 시리즈 의 마지막 회 입 니 다.나 는 자바 스 크 립 트 의 신세 에 대한 수수 께 끼 를 이해 하고 원 하 는 것 에 가 까 운 변수 시스템 을 파악 하 며 운영 하 는 기둥 을 훔 치 는 방법 을 이해 하고 포 대사 가 우여곡절 한 OOP 실현 을 잘 알 고 있다 고 생각한다.그럼 너 는 height level 에서 도 멀 지 않 았 다.물론 height level 을 하려 면 여러 원우 들 이 입 에 자주 달 고 다 니 는 두 가 지 를 더 파악 해 야 합 니 다: this 와 폐쇄.this 는 무슨 귀신 입 니까?가방 을 닫 는 것 은 또 무슨 귀신 입 니까?본 선과 의 개념 에 따 르 면 여 기 는 말 하지 않 고 우 리 는 '그래서' 만 이야기한다.잔말 말고 얘 기 좀 하 자!
this 는 무슨 귀신 입 니까?
this 이 놀 이 를 귀신 이 라 고 부 르 는 것 은 지나 치지 않 습 니 다. 많은 흰 둥 이 는 화면 을 보 자마자 this 의 대본 이 순간 어 지 럽 습 니 다.자바, C \ # 같은 this 처럼 보이 지만 직관 적 으로 자바, C \ # 의 this 를 뛰 어 넘 은 것 같 습 니 다. 어렴풋 하고 모 르 는 것 같 습 니 다.각종 도 모, G 형 은 대부분 본 선과 의 해석 을 받 았 다.심혈 을 기울 여 기록 하고 연구 할 것 이 며, 무심코 대충 훑 어 보 았 을 뿐이다.그래서 많은 늙 은 새들 이 this 가 무슨 귀신 인지 철저히 알 지 못 했다.this 가 무슨 귀신 인지 알 고 싶다 면 이 귀신 이 어떻게 왔 는 지 먼저 알 아야 한다.
자 바스 크 립 트 의 디자인 취 지 는 과정 적 인 것 이 라 고 하 는데 뒤에 있 는 포 스님 은 시대 의 흐름 을 따라 가기 위해 OOP 를 우여곡절 하 게 실현 하기 위해 this 를 도입 하여 사례 대상 을 나타 낸다.OOP 는 실현 되 었 지만 자 바스 크 립 트 의 세 계 는 이때부터 this 가 하나 더 생 겼 다.this 는 자 바스 크 립 트 의 OOP 에 적 용 될 때 실례 자 체 를 나타 낸다.하지만 내 가 쓴 자 바스 크 립 트 가 new 대상 이 아니 라 마음대로 this 를 썼 다 면 이때 this 는 무엇 을 의미 하 는가?구 덩이 를 메 우 고 구 덩이 를 파 다 니!구덩이 가 있 으 면 채 워 야 한다. 그래서 포 대 사 는 이 this 에 의 미 를 부여 하려 고 했다. this 가 OOP 에 응용 되 었 을 때 인 스 턴 스 자 체 를 나타 낸다.한편, this 가 OOP 가 아 닌 경우 this 가 있 는 요소 의 귀속 대상 을 나타 낸다.이 말 은 이리 저리 추상 적 이어서 코드 를 보면 가장 진실 하 다.
1) this 가 function 에 있 을 때 funciton 은 과정 식 함수 일 뿐이다.
    
        /**  :
         *test            ,   OOP
         *  test    this,    this    test     
         * test        Window    
         * ****/
       function test(){
           console.log(this); //    Window  
       }
       test();
    

2) this 가 실례 화 되 지 않 은 대상 에 있 을 때
   
        /**  :
         *   this       f    
         *f      obj  
         *  :this  obj  
         * ****/
        var obj={
            a:123,
            f:function(){
                console.log(this);//    obj  
                console.log(this.a);//   123
            }
        };
        console.log(obj.f());//  
    

3) this 가 OOP 의 게임 방법 에 적 용 될 때
    
        /**  :
         *clazz         ,    clazz     
         *this         new     
         * ****/
        function clazz(a,b){
            this.a=a;
            this.b=b;
            this.print=function(){
                console.log(this.a+this.b);
            };
        }
        var c1=new clazz(1,1);
        c1.print(); //  :2
        var c2=new clazz(2,2);
        c1.print(); //  :4
    

4) 이것 이 훔 쳐 서 기둥 으로 바 뀌 었 을 때
    
        /**  :
         *  call  apply f       this       
         * ****/
        var obj={
            a:123,
            f:function(){
                console.log(this);//    obj  
                console.log(this.a);//    undefined
            }
        };
        //  call  apply f      , this    window
        obj.f.call(this);
    

가방 닫 는 게 뭐야?
우 리 는 쓸데없는 말 은 그만 하고, 방법 에 따라, 우선 이 소위 폐쇄 라 는 것 이 어떻게 왔 는 지 알 아 보 자.전 세계 (코드 를 쓰 는 사람) 가 다 알 고 있 습 니 다. c, 자바, c + + 와 같은 언어 는 모두 엄격 한 문법 이 있 습 니 다. 특히 데이터 형식, 함수 의 정 의 는 모두 자신의 규칙 이 있 습 니 다. 당신 이 쓰 고 싶 은 대로 쓰 는 것 이 아 닙 니 다.그러나 자 바스 크 립 트 라 는 놀 이 는 포 대사 에 의 해 네가 쓰 고 싶 은 대로 쓰 도록 설계 되 었 는데 함수 에서 함 수 를 다시 정의 할 수 있다 는 것 을 보면 자유도 가 매우 크다 는 것 을 알 수 있다.자바, c + + 를 다시 봐 봐. 왜 이래?자 유 는 자유 입 니 다. 그러나 이 게임 방법 은 문 제 를 일 으 켰 습 니 다. 대학 에서 책 을 열심히 읽 은 신발 은 모두 알 고 있 습 니 다. 함 수 는 스 택 에서 실 행 됩 니 다. 만약 에 함수 내장 함수 가 있 으 면 자 함 수 는 부모 함수 에서 정 의 된 구성원 을 인용 합 니 다. 부모 함수 가 over 가 되 었 을 때 일반적인 방식 으로 부모 함수 가 스 택 에서 나 왔 습 니 다. 그 정의 의 구성원 도 Over 가 되 어야 합 니 다.만약 이때 하위 함수 가 살아있다 면, 그것 이 인용 한 부모 함수 변수 가 또 보이 지 않 으 면, 그 하위 함 수 는 사용 할 수 없 을 것 이다.그래서 부 대 사 는 이 bug 에 패 치 를 해 야 했 고 가방 을 닫 고 놀 면 태 어 났 습 니 다.그럼 우리 통속 적 으로 폐쇄 에 대해 정 의 를 내 립 시다.
폐쇄: 살 아 있 는 사람 이 죽은 사람 에 게 서 물건 을 훔 쳐 와 죽은 사람 을 따라 가지 않 고 사라 지게 한다.살 아 있 는 사람 이 이 물건 들 을 가 졌 기 때문에 수명 도 길 어 졌 다.이것 은 자 바스 크 립 트 가 천마 행 공의 자유도 에 대응 하기 위해 만 든 버그 입 니 다!
이것 은 예 를 들 어 좀 고상 하지 않 지만 단지 관리 가 이해 하기 편리 하도록 하기 위해 서 일 뿐 이 니 개의 치 마 세 요.좋아, 코드 분석 을 보 자.
    
        function oldMan(){
            var money=999999;//      
            //          
            return function young(){
                console.log("        "+money+"  ");
            }
        }
        var y=oldMan();//             ,oldMan      ,   !!
        y();//       ,         
    

관 리 는 네가 이 몇 십 자의 통속 적 인 해법 을 보 았 는 지 모 르 겠 지만, 이른바 폐쇄 라 는 것 에 대해 아직도 경외 심 을 가지 고 있 는 지 모르겠다.
  
만약 네가 이 몇 편의 통속 적 인 박문 을 진지 하 게 본다 면, 나 는 네가 자 바스 크 립 트 에 대한 인식 이 틀림없이 또 다른 계단 이 라 고 믿는다.물론 전단 에 발 을 붙 이려 면 자바 스 크 립 트 만 으로 는 먹고 살기 에 부족 하 다. HTML, CSS 도 알 아야 한다.건물 주 는 이어서 이 두 가지 지식 에 대해 몇 편 더 이야기 할 계획 이다.관심 있 으 시 면 유의 하 세 요!다른 자 바스 크 립 트 문제 도 같이 공부 하고 토론 하 는 것 을 환영 합 니 다!

좋은 웹페이지 즐겨찾기