>  기사  >  웹 프론트엔드  >  js 클로저 예제 요약_기본 지식

js 클로저 예제 요약_기본 지식

WBOY
WBOY원래의
2016-05-16 16:31:461578검색

Js 폐쇄
폐쇄 전 알아두셔야 할 사항
1. 기능 범위
(1) Js 언어의 특별한 점은 전역 변수를 함수 내에서 직접 읽을 수 있다는 것입니다

코드 복사 코드는 다음과 같습니다.


익명 함수의 실행 결과(즉, 내부 하위 함수의 선언이 전역 변수 cut에 할당됨), i가 메모리에 저장됩니다.
cut()을 실행할 때 메모리에서 직접 값을 가져옵니다. i는 cnt() 함수에 의해서만 호출될 수 있으며 직접 Alert(i)는 작동하지 않습니다
클로저에 매개변수를 전달할 수도 있습니다

코드 복사 코드는 다음과 같습니다.

var cnt=(함수(숫자){
반환 함수(){
경고(숫자);
숫자 ;
}
})(5);
cnt();//5
cnt();//6
cnt();//7
//물론 호출 시 매개변수를 전달할 수도 있습니다
var cnt=(함수(){
var i=0;
반환 함수(num){
숫자 =i;
경고(숫자);
나 ;
}
})();
cnt(1);//1
cnt(2);//3
cnt(3);//5

클로저에 대해 더 잘 이해하기 위해 다음 코드를 살펴보겠습니다
예를 들어 배열을 반환하려고 합니다. 배열에는 5개의 함수가 있습니다. 첫 번째 함수는 0을 나타내고 두 번째 함수는 1을 나타냅니다.
코드를 이렇게 작성하면

코드 복사 코드는 다음과 같습니다.

함수 상자(){
var arr=[];
for(i=0;i arr=function(){return i;}
}
복귀
}
var a=box();
Alert(a);//5개의 함수 본문을 포함하는 배열
경고(a[0]());
경고(a[1]());

팝업 기능 본체
함수(){return i;} }
마지막 i는 4이고 그 다음은 5가 됩니다
For 루프 중지
모든 경우에 5개의 팝업이 나타나는 것을 발견했는데 이는 확실히 우리의 요구 사항을 충족하지 않습니다

해결책 1
내부 기능 자체 즉시 실행

코드 복사 코드는 다음과 같습니다.

함수 상자(){
var arr=[];
for(i=0;i arr=(함수(숫자){return i;})(i);
}
복귀
}
var a=box();
for(var i=0;i 경고(a);
}

하지만 반환된 배열의 요소는 함수 실행의 결과라는 것을 알았지만 우리가 원하는 것은 함수가 코드를 업그레이드해야 한다는 것입니다

해결책 2
폐쇄 구현

코드 복사 코드는 다음과 같습니다.

함수 상자(){
var arr=[];
          for(var i=0;i

arr=(함수(숫자){
반환 함수(){return num;}
                  })(i);

}
복귀 도착;  }

var arr=box();

for(var i=0;i 경고(arr());//0,1,2,3,4

}

키코드

코드 복사 코드는 다음과 같습니다.

arr=(함수(숫자){
           반환 함수(){반환 번호;}
})(i);


i=0일 때
arr[0]=(함수(숫자){반환 함수(){반환 숫자;}})(0);

1시


arr[1]=(함수(숫자){반환 함수(){반환 숫자;}})(1);

위와 같은 휴무 혜택이 있습니다! 매우 간단하고 실용적입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.