패 킷 함수 단순 인식

1658 단어 자바 script전단
1. 폐쇄 란 무엇 인가?폐쇄 적 인 특징 은 무엇 입 니까?
패 킷 을 닫 는 것 은 함수 이지 만 이 함 수 는 다른 함수 내부 에 있 는 것 으로 다른 함수 내부 의 변 수 를 읽 을 수 있 습 니 다.폐쇄 는 사실 매우 흔히 볼 수 있 지만, 단지 우리 가 이것 이 폐쇄 라 는 것 을 거의 의식 하지 못 할 것 이다.패 킷 을 닫 는 가장 큰 특징 은 자신의 탄생 환경 을 기억 할 수 있다 는 것 이다. 어디서 호출 되 든 지 간 에 방문 하 는 것 은 성명 시 역할 역 의 변수 이 고 부모 함수 에 접근 할 수 있 는 변수 이다. 예 를 들 어:
    function fn1() {
        var b=234;
        function fn2() {
            console.log(b);
        }
        return fn2;
    }
    var fn2=fn1();
    fn2();//234

이때 fn2 는 하나의 패 킷 함수 이다. js 에서 의 역할 도 메 인 은 품사 역할 도 메 인, 즉 함수 의 역할 도 메 인 은 함수 의 성명 위치 에 의 해 확정 되 기 때문에 fn2 fn1 에서 설명 할 때 그의 역할 도 메 인과 역할 도 메 인 체인 이 확정 되 었 다. fn2 이 실 행 될 때 집행 환경 을 만 들 때 역할 도 메 인 체인 에 따라 한 단계 씩 변 수 를 찾 을 것 이다.최종 적 으로 fn1 에서 변 수 를 찾 았 다. 이것 이 바로 외부 호출 fn2 시 출력 fn1 에서 b 의 값 이자 폐쇄 함수 가 자신의 탄생 환경 을 기억 할 수 있 는 이유 이다.
2. 폐쇄 함수 의 주의 점
일반 함수 가 실 행 된 후에 그 중의 변 수 는 다시 사용 되 지 않 으 면 메모리 가 회수 되 지만 패 킷 함수 에서 전체 국면 fn2 이 계속 인용 되 기 때문에 fn1 도 회수 되 지 않 고 변수 b 도 메모리 에 남아 있 습 니 다.따라서 이러한 메모리 가 회수 되 지 않 는 문 제 를 피하 기 위해 서 우 리 는 폐쇄 함수 fn2 를 사용 한 후에 폐쇄 함 수 를 비 워 두 고 인용 관 계 를 차단 하여 회수 fn1 메모리 의 목적 을 실현 해 야 한다.
fn2=null;

그 밖 에 이 점 을 주의해 야 할 것 은 폐쇄 함수 의 형성 은 두 가지 특징 을 가진다. 하 나 는 다른 함수 내부 에 성명 하 는 것 이 고, 다른 하 나 는 부모 함 수 를 사용 해 야 하 는 변수 이 며, 둘 중 하 나 는 없어 서 는 안 된다 는 것 이다. 그래서
    function foo(){
        return function sub(){
        }
    
    }

이상 은 폐쇄 가 형성 되 지 않 았 다. 폐쇄 가 형성 하 는 두 번 째 조건 을 만족 시 키 지 못 했 기 때문이다.

좋은 웹페이지 즐겨찾기