JavaScript 진급: 폐쇄 에 대한 이 해 를 말 합 니 다.
5004 단어 JavaScript
이 글 은 제 가 완 일 봉 선생님 의 폐쇄 블 로그 에 대한 독후감 을 읽 었 습 니 다. 폐쇄 에 대한 이 해 를 강화 하기 위해 여기 서 폐쇄 에 대한 이 해 를 쓰 고 잘못 을 지적 해 주신 것 을 환영 합 니 다.
1. 변수의 역할 영역
패 킷 을 이해 하려 면 먼저 자바 script 의 특수 한 변수 역할 영역 을 말 해 보 세 요.
변수의 역할 영역 은 두 가지 가 있 습 니 다. 국부 변수 와 전역 변수 입 니 다.
자 바스 크 립 트 의 함수 내 부 는 전역 변 수 를 읽 을 수 있 지만 외부 함 수 는 읽 을 수 없 지만 어떤 함수 의 국부 변 수 를 읽 을 수 없습니다.
2. 어떻게 외부 에서 국부 변 수 를 읽 습 니까?
여기 서 나 는 완 일 봉 선생님 의 예 를 직접 인용 했다.
우 리 는 코드 를 보 았 다.
function f1(){
n = 100;
function f2(){
alert(n);
}
}
이 코드 에서 f1 의 부분 변 수 는 f2 에 있어 모두 볼 수 있 지만 반대로 안 됩 니 다.이것 은 JS 의 '체인 역할 영역' 이다.
'체인 역할 영역' 은 하위 대상 이 모든 부모 대상 의 변 수 를 한 단계 한 단계 위로 찾 기 때문에 부모 대상 의 모든 변 수 는 하위 대상 에 대해 볼 수 있 습 니 다.
function f2 를 return 으로 되 돌려 주면 어 떨 까요?
function f1(){
n = 100;
function f2(){
}
return f2;
}
이렇게 하면 외부 함수 가 f1 을 호출 하여 f1 의 부분 변 수 를 얻 을 수 있 습 니 다.
3. 폐쇄 란 무엇 입 니까?
완 일 봉 선생님 의 블 로그 에서 그 는 폐쇄 를 언급 하면 '함수 내부 에 정 의 된 함수' 로 이해 할 수 있다.
여기 서 저 는 패 킷 을 다른 함수 역할 영역 에서 변 수 를 방문 할 수 있 는 함수 로 이해 합 니 다. 보통 이 함 수 는 방문 변수 함수 내부 에 있 습 니 다.
4. 폐쇄 적 인 용도
패 킷 을 닫 는 역할 은 첫째, 함수 내부 의 변 수 를 읽 는 것 입 니 다. (내부 함수 도 변수 에 값 을 부여 할 수 있 습 니 다) 둘째, 변 수 는 메모리 에 계속 저장 되 어야 하지만 전체 변 수 를 오염 시 키 지 않 습 니 다.
코드 보기:
function A(){
var count = 0;
function B(){
count ++;
console.log(count);
}
return B;}var c = A();
c();// 1
c();// 2
c();// 3
B 는 A 에 있 기 때문에 B 는 A 에 의존 하고 c 는 B 를 인용 하기 때문에 A 는 간접 적 으로 c 에 인용 되 고 A 는 회수 되 지 않 고 메모리 에 저 장 됩 니 다.count 는 A 의 변수 입 니 다. 그 값 은 B 에서 바 뀌 었 습 니 다. 함수 B 가 실 행 될 때마다 count 의 값 은 원래 의 기초 위 에서 1 을 누적 합 니 다.그래서 A 의 count 는 메모리 에 저장 되 어 있 습 니 다.
5. 폐쇄 적 인 사용 방법
1. 함 수 를 되 돌려 주 는 방식: (여 기 는 익명 함수 입 니 다)
function A(){
var count = 0;
return function (){
count ++;
console.log(count);
}
}
var c = A();
c();// 1
c();// 2
c();// 3
2, 반환 함수 표현 식
var A = function(){
var count = 0;
var B = function (){
count++;
console.log(count);
}
return B;
}
var c = new A();
c();// 1
c();// 2
c();// 3
3. 배열 의 형식 으로 되 돌아 갈 수도 있다.
var A = function(){
var count = 0;
function B(){
count++;
console.log(count);
}
return {
b :B;
};
}
A.b(); //1
A.b(); //2
A.b(); //3
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.