자 바스 크 립 트 폐쇄 문제 상세 설명

패 킷 을 닫 는 것 은 순 함수 식 프로 그래 밍 언어의 전통 적 인 특성 중의 하나 이다.패 킷 을 핵심 언어 구조 재 의 구성 부분 으로 보고 자 바스 크 립 트 언어 는 함수 식 프로 그래 밍 언어 와 의 밀접 한 관 계 를 보 여 주 었 다.복잡 한 조작 을 간소화 할 수 있 기 때문에 주류 자 바스 크 립 트 라 이브 러 리 와 수준 높 은 제품 코드 에서 폐쇄 가 날로 유행 하고 있다.
1.변수의 역할 영역
패 킷 을 닫 는 것 을 소개 하기 전에 자 바스 크 립 트 의 변수 역할 영역 을 이해 합 니 다.변수의 역할 영역 은 두 가지 로 나 뉘 는데 그것 이 바로 전역 변수 와 국부 변수 이다.
1.전역 변수

var n = 999; //    

    function f1() {
        a = 100; //   a      
        alert(n);
    }
    console.log(a); //100
여기 서 함수 내외 부 는 변수의 값―전역 변 수 를 직접 얻 을 수 있다.
2.부분 변수

//    
    function f2() {
        var b = 22;
    }
    console.log(b);   //  
여기 서 함수 외부 에 서 는 함수 내부 에서 정 의 된 값―부분 변 수 를 직접 찾 을 수 없습니다.
여기까지 말 하면 외부 에서 부분 변수의 값 을 가 져 오 려 면 어떻게 해 야 합 니까?
이어서 아래 를 보 세 요.
2.외부 에서 국부 변 수 를 가 져 오 는 방법
다음 에 우 리 는 예 를 하나 보 자.

var outer = 'Outer'; //     
var copy; 
function outerFn(){ //     
 var inner = 'Inner'; //           ,       
 function innerFn(){ // outerFn()  innerFn() 
 //                    ,
 //        outer inner 
 console.log(outer); 
 console.log(inner); 
 } 
 copy=innerFn; //   innerFn()   
 //   copy           ,         
} 
outerFn(); 
copy(); //       innerFn(),                     
위의 예 를 분석 해 보 자.innerFn()에서 변수 outer 에 접근 할 수 있 습 니 다.전체 컨 텍스트 에 있 기 때 문 입 니 다.
outerFn()을 실행 한 후 innerFn()을 실 행 했 습 니 다.이 함수 의 인용 을 전역 변수 로 복사 합 니 다.
copy 에서 이 루어 집 니 다.변수 copy 호출 함수 innerFn()을 사용 하여 실 행 될 때 현재 outerFn()의 작업 이 아 닙 니 다.
도 메 인 에 사용 되 었 습 니 다.그래서 아래 코드 는 실패 해 야 하지 않 습 니까?
console.log(inner);
변수 inner 의 값 은 undefined 일 까요?그러나 위의 코드 세 션 의 출력 은:
“Outer”
“Inner”
이것 이 바로 JavaScript 의 체인 역할 영역 구조 입 니 다.하위 대상 은 모든 부모 대상 의 변 수 를 한 단계 한 단계 위로 찾 습 니 다.그래서 부모 대상 의 모든 변 수 는 하위 대상 을 볼 수 있 고 그렇지 않 으 면 성립 되 지 않 습 니 다.
이렇게 하면 우 리 는 함수 내부 의 국부 변 수 를 얻 을 수 있다.
3.폐쇄 적 개념
위의 코드 블록 중의 copy()함 수 는 폐쇄 입 니 다.내 이해 에 있어 서 패 킷 을 닫 는 것 은 함수 내부 변 수 를 읽 을 수 있 는 함수 이다.
자 바스 크 립 트 에 서 는 함수 내부 의 하위 함 수 를 통 해 국부 변 수 를 얻 을 수 있 기 때문에 패 킷 을 함수 내부 의 함수 로 정의 할 수 있 습 니 다.
그것 을 함수 내부 와 외 부 를 연결 하 는 다리 로 이해 할 수 있다.
4.폐쇄 적 역할
내 가 보기에 폐쇄 의 역할 은 주로 두 가지 측면 에 나타난다.
1.함수 내부 의 변 수 를 읽 을 수 있 습 니 다.
이 작용 은 이전 코드 블록 에서 이미 매우 분명하게 표현 되 었 다.
2.부분 변수의 값 을 메모리 에 계속 저장 할 수 있 습 니 다.
전체적으로 알 수 있 듯 이 국부 변 수 는 사용 할 때 만 메모리 에 일시 적 인 저장 공간 을 열 고 함수 운행 이 끝 난 후에 자동 으로 공간 을 방출 합 니 다.패 킷 의 출현 은 국부 변 수 를 전역 변수 처럼 메모리 에 일치 하 게 저장 할 수 있다.

        function c1() {
            var z = 9999;
            nAdd = function() {
                z += 1;
            }

            function c2() {
                console.log(z);
            }
            return c2;
        }
        var result = c1();
        result(); //9999
        nAdd();
        result(); //10000
상기 코드 에서 먼저 c1()을 실행 합 니 다.이때 z=9999;nAdd()를 한 번 더 실행 하여 z+1;c1()출력 을 실행 할 때 z 의 값,z=10000.z 의 값 이 메모리 에 저장 되 어 있 음 을 설명 합 니 다.첫 번 째 호출 c1()등에 서 자동 으로 제거 되 지 않 았 습 니 다.
이 럴 때 는 패 킷 을 닫 는 사용 이 많은 메모 리 를 소모 할 수 있 으 므 로 패 킷 을 남용 하지 않도록 주의해 야 한다.함 수 를 종료 하기 전에 사용 하지 않 는 부분 변 수 를 모두 삭제 합 니 다.
자 바스 크 립 트 폐쇄 문 제 를 자세히 설명 하 는 이 글 은 여기까지 입 니 다.자 바스 크 립 트 폐쇄 문제 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기