자 바스 크 립 트 의 역할 영역 과 폐쇄 문 제 를 간단히 이야기 하 다.

1998 단어
JavaScript 의 역할 영역 은 함 수 를 경계 로 하고 서로 다른 함수 가 상대 적 으로 독립 된 역할 영역 을 가지 고 있 습 니 다.함수 내 부 는 전역 변 수 를 설명 하고 방문 할 수 있 으 며 국부 변 수 를 설명 할 수 있 습 니 다 (var 키 워드 를 사용 하고 함수 의 매개 변수 도 국부 변수 입 니 다). 그러나 함수 외부 에 서 는 내부 의 국부 변 수 를 방문 할 수 없습니다.

function test() {
var a = 0; //     
b = 1; //     
}
a = ?, b = ? // a undefined,b 1

같은 이름 의 부분 변 수 는 전체 변 수 를 덮어 씁 니 다. 그러나 본질 적 으로 두 개의 독립 된 변수 이 고 한 측 이 변화 하면 다른 한 측 에 영향 을 주지 않 습 니 다.

a = 5; //    a   5
function test() {
var a = 4; //    a   4
}();
a = ? //    a    5,      

일반적으로 함수 가 끝 난 후에 함수 내부 변수 에 대한 인용 이 모두 끝나 면 함수 안의 부분 변 수 는 회수 되 고 함수 의 실행 환경 은 비 워 집 니 다. 그러나 내부 함수 로 함수 의 반환 결과 가 되면 상황 이 달라 집 니 다.

function test(i) {
var b = i * i;
return function() {
return b--;
};
}
var a = test(8);
a(); //     64,     b 63
a(); //     63,     b 62

내부 함 수 를 반환 값 으로 할 때 함수 가 끝 난 후에 내부 변수의 인용 이 끝나 지 않 았 기 때문에 함수 의 국부 변 수 는 회수 할 수 없고 함수 의 실행 환경 이 보존 되 어 패키지 효과 가 형성 되 었 기 때문에 이 인용 을 통 해 회수 되 어야 할 내부 변 수 를 방문 할 수 있 습 니 다.패 킷 을 닫 으 면 함수 의 부분 변 수 를 '개인' 변수 로 만 들 고 돌아 오 는 내부 함수 로 만 접근 할 수 있 으 며 다른 어떠한 수단 으로 도 바 꿀 수 없습니다.따라서 패 킷 을 닫 으 면 국부 변수 와 보호 변 수 를 유지 하 는 데 사용 할 수 있다.패 킷 을 사용 하지 않 는 경우:

var a = []; //   a   5   
for (var i = 0, m = a.length; i < m; i++) {
a[i].onclick = function(e) {
return 'No. ' + i;
};
}
//         ,     “No. 5”,  i     5
       :
function test(i) {
return function(e) {
return 'No. ' + i;
};
}
var a = []; //   a   5   
for (var i = 0, m = a.length; i < m; i++) {
a[i].onclick = test(i);
}
//           ,      No. 0 ~ No. 4

폐쇄 는 편리 함 을 가 져 오 는 동시에 일부 단점 도 가 져 올 수 있다. 1. 절차 의 복잡 도가 증가 하고 이해 가 더욱 어렵다.폐쇄 적 인 등장 은 그 자체 가 언어의 bug 이지 만 독특한 기능 으로 남아 있 습 니 다.그것 은 주요 기능 이 아니 라 보조 수단 이다.

좋은 웹페이지 즐겨찾기