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

좋은 웹페이지 즐겨찾기