패 킷 함수 단순 인식
패 킷 을 닫 는 것 은 함수 이지 만 이 함 수 는 다른 함수 내부 에 있 는 것 으로 다른 함수 내부 의 변 수 를 읽 을 수 있 습 니 다.폐쇄 는 사실 매우 흔히 볼 수 있 지만, 단지 우리 가 이것 이 폐쇄 라 는 것 을 거의 의식 하지 못 할 것 이다.패 킷 을 닫 는 가장 큰 특징 은 자신의 탄생 환경 을 기억 할 수 있다 는 것 이다. 어디서 호출 되 든 지 간 에 방문 하 는 것 은 성명 시 역할 역 의 변수 이 고 부모 함수 에 접근 할 수 있 는 변수 이다. 예 를 들 어:
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(){
}
}
이상 은 폐쇄 가 형성 되 지 않 았 다. 폐쇄 가 형성 하 는 두 번 째 조건 을 만족 시 키 지 못 했 기 때문이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.