폐쇄 무엇 폐쇄인가? 장점과 패키지를 폐쇄의 단점?

폐쇄는 무엇입니까? 장점과 패키지를 폐쇄의 단점?

폐쇄 (폐쇄)도 그 특성 큰 어려움 자바 스크립트,하지만. 많은 고급 응용 프로그램은 폐쇄를 달성하기 위해 의존해야합니다.

1 변수 범위

클로저를 이해하기 위해서, 우리는 먼저 자바 스크립트의 특수 변수 범위를 이해해야합니다.

글로벌 및 로컬 변수 : 더 두 가지 유형보다 변수 아무것도 범위 없습니다.

내부 함수 글로벌 변수를 직접 읽을 수 있지만 함수 외부 함수 내부의 지역 변수를 읽을 수 없습니다 : 특수 자바 스크립트 언어는 점이다.

주의 사항 : 당신이 함수 내에서 변수를 선언 할 때 var에 명령을 사용하십시오. 당신이하지 않으면, 당신은 실제로 전역 변수를 선언합니다!

(2) 방법을 외부로부터의 함수 내 로컬 변수를 읽으려면?

여러 가지 이유를 들어, 우리는 때때로 함수 내에서 지역 변수에 도착해야합니다. 그러나 이미 정상적인 상황에서, 그것은 불가능했다! 그것은 단지 다른 방법을 통해 달성 될 수있다.

그것은 즉, 함수 내부에서 다음 기능을 정의한다.

F1 함수 () {

    VAR의 N = 999;

    함수 F2 () {
      경고 (N); // 999
    }

  }

내부 기능, F2의 내부의 모든 로컬 변수 볼 F1 시간있는 F1 위의 코드에서, 함수 (F2)가 포함되어있다. 그러나 반대 F2 내부 로컬 변수 보이지 않도록 F1이다 아니다.

이것은, 자바 스크립트 언어 별 "범위 체인"구조 (체인 범위)이며

자식 객체에 부모 개체의 상향 모든 변수를 찾습니다. 따라서, 모든 변수 부모 객체는 자식 개체를 볼 수 있으며, 그 반대.

F2가 F1의 로컬 변수에서 판독 할 수 있으므로, 매우 긴 리턴 값 F2로, 우리는 아직 그 내부 변수 외부 F1을 읽을 수있다!

3, 폐쇄의 개념

함수 F2 위의 코드는 고정된다.

전문 문학 폐쇄 정의의 다양한 나는 그것을 이해, 매우 추상적입니다 : 폐쇄는 내부 변수 함수의 다른 기능을 읽을 수 있습니다.

자바 스크립트 때문에, 단지 내부 함수 서브 루틴 클로저가 단순히으로 이해 될 수 있도록하는 것이, 지역 변수를 읽으려면 "함수 내에서 정의 된 함수."

따라서, 본질적으로, 밀폐 내부 브릿지 기능 부에 외부 접속 기능.

 4, 클로저의 사용

클로저는 많은 장소에서 사용할 수 있습니다. 그것은 하나는 상기 변수의 함수 내에서 판독 될 수이고, 다른 하나는 이러한 변수의 값이 메모리에 남아 F1 자동 호출 후에 해제되지 있도록하고, 두 가장 유용하다.

왜 이렇게입니까? 그 이유는, 상위 함수 F1은 통화 종료 후 F2이고, F2가 메모리에 항상 F2로 연결되는 글로벌 변수에 할당되고, 메모리에 따라서 항상 F1 및 F2, F1의 존재에 의존하지이다 가비지 컬렉션 (가비지 수집)을 회수.

이 코드 장소 주목할 또, 그 "nAdd = 함수 () {N + = 1}"제 전면 nAdd의 var 키워드에 사용되지 않은 광고는, 이에 Nadd 전역 변수보다는 로컬 변수이다. 둘째로,이 값은 익명 함수 nAdd (익명 함수)이며,이 익명 함수 자체가 폐쇄, 함수 외부 함수 내 국소 변수에 동작 할 수 nAdd 동등한 세터,이다.

5, 폐쇄주의의 사용

때문에이 변수의 기능은 메모리에 저장되는 것 클로저에 메모리 소비가 큰 (1), 그렇지 않으면이 IE의 성능 문제 웹 페이지가 메모리 누수가 발생할 수 발생할 학대 폐쇄 될 수 없다. 이 솔루션은 모든 지역 변수가 사용되지 않는 삭제 기능을 종료하기 전에이다.

(2) 고정 상위 함수 내부 변수의 값을 변경 상위 밖에서 작동한다. 당신이 개체로 사용하기 (객체), 공공 방법의 폐쇄로 (공공 방법)의 개인 재산 (비공개의 값)와 같은 내부 변수를 부모 기능을한다면, 당신은에하지 않도록주의해야합니다 단지 내부 변수의 상위 함수의 값을 변화.

폐쇄 (폐쇄)도 그 특성 큰 어려움 자바 스크립트,하지만. 많은 고급 응용 프로그램은 폐쇄를 달성하기 위해 의존해야합니다.

1 변수 범위

클로저를 이해하기 위해서, 우리는 먼저 자바 스크립트의 특수 변수 범위를 이해해야합니다.

글로벌 및 로컬 변수 : 더 두 가지 유형보다 변수 아무것도 범위 없습니다.

내부 함수 글로벌 변수를 직접 읽을 수 있지만 함수 외부 함수 내부의 지역 변수를 읽을 수 없습니다 : 특수 자바 스크립트 언어는 점이다.

주의 사항 : 당신이 함수 내에서 변수를 선언 할 때 var에 명령을 사용하십시오. 당신이하지 않으면, 당신은 실제로 전역 변수를 선언합니다!

(2) 방법을 외부로부터의 함수 내 로컬 변수를 읽으려면?

여러 가지 이유를 들어, 우리는 때때로 함수 내에서 지역 변수에 도착해야합니다. 그러나 이미 정상적인 상황에서, 그것은 불가능했다! 그것은 단지 다른 방법을 통해 달성 될 수있다.

그것은 즉, 함수 내부에서 다음 기능을 정의한다.

F1 함수 () {

    VAR의 N = 999;

    함수 F2 () {
      경고 (N); // 999
    }

  }

내부 기능, F2의 내부의 모든 로컬 변수 볼 F1 시간있는 F1 위의 코드에서, 함수 (F2)가 포함되어있다. 그러나 반대 F2 내부 로컬 변수 보이지 않도록 F1이다 아니다.

이것은, 자바 스크립트 언어 별 "범위 체인"구조 (체인 범위)이며

자식 객체에 부모 개체의 상향 모든 변수를 찾습니다. 따라서, 모든 변수 부모 객체는 자식 개체를 볼 수 있으며, 그 반대.

F2가 F1의 로컬 변수에서 판독 할 수 있으므로, 매우 긴 리턴 값 F2로, 우리는 아직 그 내부 변수 외부 F1을 읽을 수있다!

3, 폐쇄의 개념

함수 F2 위의 코드는 고정된다.

전문 문학 폐쇄 정의의 다양한 나는 그것을 이해, 매우 추상적입니다 : 폐쇄는 내부 변수 함수의 다른 기능을 읽을 수 있습니다.

자바 스크립트 때문에, 단지 내부 함수 서브 루틴 클로저가 단순히으로 이해 될 수 있도록하는 것이, 지역 변수를 읽으려면 "함수 내에서 정의 된 함수."

따라서, 본질적으로, 밀폐 내부 브릿지 기능 부에 외부 접속 기능.

 4, 클로저의 사용

클로저는 많은 장소에서 사용할 수 있습니다. 그것은 하나는 상기 변수의 함수 내에서 판독 될 수이고, 다른 하나는 이러한 변수의 값이 메모리에 남아 F1 자동 호출 후에 해제되지 있도록하고, 두 가장 유용하다.

왜 이렇게입니까? 그 이유는, 상위 함수 F1은 통화 종료 후 F2이고, F2가 메모리에 항상 F2로 연결되는 글로벌 변수에 할당되고, 메모리에 따라서 항상 F1 및 F2, F1의 존재에 의존하지이다 가비지 컬렉션 (가비지 수집)을 회수.

이 코드 장소 주목할 또, 그 "nAdd = 함수 () {N + = 1}"제 전면 nAdd의 var 키워드에 사용되지 않은 광고는, 이에 Nadd 전역 변수보다는 로컬 변수이다. 둘째로,이 값은 익명 함수 nAdd (익명 함수)이며,이 익명 함수 자체가 폐쇄, 함수 외부 함수 내 국소 변수에 동작 할 수 nAdd 동등한 세터,이다.

5, 폐쇄주의의 사용

때문에이 변수의 기능은 메모리에 저장되는 것 클로저에 메모리 소비가 큰 (1), 그렇지 않으면이 IE의 성능 문제 웹 페이지가 메모리 누수가 발생할 수 발생할 학대 폐쇄 될 수 없다. 이 솔루션은 모든 지역 변수가 사용되지 않는 삭제 기능을 종료하기 전에이다.

(2) 고정 상위 함수 내부 변수의 값을 변경 상위 밖에서 작동한다. 당신이 개체로 사용하기 (객체), 공공 방법의 폐쇄로 (공공 방법)의 개인 재산 (비공개의 값)와 같은 내부 변수를 부모 기능을한다면, 당신은에하지 않도록주의해야합니다 단지 내부 변수의 상위 함수의 값을 변화.

추천

출처www.cnblogs.com/xiewangfei123/p/12089529.html