지식의 프런트 엔드 : 자바 스크립트 기본 사항 - 범위 및 폐쇄 - 원칙과 폐쇄 및 스택 오버 플로우 및 메모리 누수 원칙과 해당 솔루션의 역할

원칙과 폐쇄의 역할

폐쇄 :

액세스 권리 변수 함수 영역의 다른 기능.

폐쇄에게 일반적인 방법을 만드는 것은 다른 함수에서 함수를 만드는 것입니다.

패키지는 폐쇄 있습니다 :

통로 내부 변수 함수는, 함수는 가비지 컬렉션 처리되지 않을 것이며, 환경에 보관 된

함수 내에서 선언 된 변수가 로컬이기 때문에, 단지 함수 내에 액세스 할 수 있지만, 외부의 변수의 함수 범위 체인의 특성 인 기능 안에 표시된다.

아이들은 날짜를 찾을 단계 모양으로 상위 단계에 변수를 찾아 볼 수 있습니다

따라서, 우리는 함수 내부 함수를 만들 수 있으므로, 내부의 기능을 외부 함수의 변수들이 보이는 것으로, 우리는 그 변수에 대한 액세스를 가질 수있다.

<script>
     함수   바 () {
         // 외부 함수 선언 변수 
        VAR의 값 = 1. ,
         함수 foo는 () { 
            CONSOLE.LOG (값) 
        } 
        리턴 foo는 (); 
    }; 
    var에 바 2 = 바;
     // 사실 실행은 가비지 컬렉션기구 아웃 처리 되었기 때문에 바 () 함수가 완료되지 
    // 가변이 클로저의 역할은 함수 foo를 실행 호 바 () 함수는, 푸 그럼 외층에 액세스 할 
    바 2, ();
 </ script>

foo는 () 폐쇄의 범위 내 바 (), 그래서 범위는 가비지 컬렉션 처분하지 살아남을 수 있었던 것을,이 언제든지 참조 foo에 대한 폐쇄의 역할은 ()입니다 포함.

폐쇄 패키지의 장점 :

  • 쉬운 전화 지역 변수의 맥락에서 선언
  • 논리 밀접하게, 당신은 다음, 함수 내에서 함수를 만들 수 있습니다 매개 변수 전달의 문제를 피하기 위해

폐쇄 패키지의 단점 :

클로져의 사용, 함수가 실행 한 후 파괴 될 수 없으므로 마개 다수의 메모리 누수 메모리 소비 큰 사용을 초래할 것이다 경우, 메모리에 유지

요약 :

변수 밖에 유지 오브젝트 폐쇄의 범위이기 때문에 클로저는 변수가 그것이 생성 된 환경에 남아있는 경우에도, 외부 가변 기능을 액세스 할 수있다. 중첩 된 기능과이 기능을 구현 폐쇄 암시 적 데이터 전송.

폐쇄 응용 프로그램 :

함수 addFn (a, b) {
      ( 함수 () { 
        CONSOLE.LOG (a + "+"+ b)] 
    }) 
} 
VAR의 테스트 = addFn (a, b); 
에서는 setTimeout (테스트, 3000);

첫 번째 매개 변수는 일반적에서는 setTimeout의 기능이 아니라 전통적인 가치입니다. 당신이 그것으로 값을 전달하려면에서는 setTimeout에 전달 된 내부 함수를 호출, 내부 함수에 대한 호출을 반환하는 함수를 호출 할 수 있습니다. 의 setTimeout 함수에서 그에게 외부 기능도 할 수있는 액세스 필요한 기능 파라미터 내부, 외부 기능을 수행합니다.

스택 오버 플로우 및 메모리 원칙 누수 :

1, 메모리 누수가 : 응용 프로그램의 실행이 적시에 최대 청소 또는 파괴되지 후 사용 가능한 메모리를 차지, 메모리를 참조, 메모리 누수가 너무 많이,이 프로그램의 다시로 이어질 것입니다 메모리에 대한 자격이 없습니다. 따라서, 메모리 누출이 내부 메모리에 오버 플로우가 발생할 수있다

2 스택 오버플 : 충분한 메모리가 제공되지가 완료 한 어플리케이션의 메모리 공간을 의미

3, 어떤 프로그래밍 소프트웨어에서, 같은 C 언어로, 우리는, 메모리 공간을 할당 수동으로 삭제 오프 무료 버전을 사용하는 malloc을 사용해야합니다. JS는 자신의 쓰레기 수거, 쓰레기 수집 방법 일반적으로 사용되는 마커가 삭제된다.

클리어 라벨링 방법 : 실행 환경에 변수 이후에 마크를 추가 변수를 환경으로, 환경으로 배출되지 않습니다, 한 환경의 응답으로 "실행 흐름"으로, 사용할 수 있습니다. 환경 변수를 떠난 후, 그것은로 표시됩니다 "환경을 둡니다."

4, 메모리 누수의 일반적인 원인 :

  • 전역 변수로 인한 메모리 누수
  • 클로저
  • 타이머를 삭제하지 않음

5. 해결 방법 :

  • 불필요한 전역 변수를 감소
  • 클로저의 사용량을 줄이기 (폐쇄로 인해 메모리 누출을 초래할 것이다)
  • 무한 루프의 발생을 방지하려면

참고 기사 :

https://blog.csdn.net/alegria_x/article/details/99539024

https://www.cnblogs.com/shiyou00/p/10598010.html

https://www.jianshu.com/p/9fc2e3ee4efe

추천

출처www.cnblogs.com/memphis-f/p/12061036.html