javaScript 에서 닫 힌 개인 적 인 이해, 말 은 통속 적 이 고 알 기 쉽다.

3700 단어
폐쇄 라 는 말 은 한 물건 을 싸 서 사용 하여 목적 을 달성 하 는 것 이다!
js 의 폐쇄 는 어 떻 습 니까?
쉽게 말 하면 한 함수 에 함 수 를 만 들 었 을 때 이것 은 만 든 이 함수 가 바로 폐쇄 입 니 다!그것 은 다른 함수 내부 변수의 함 수 를 읽 을 수 있다.즉, 함수 내부 와 외부 연결!
간단 한 예 설명:
1         function aaa(){
2             var i = 2;
3             function bbb(){
4                 alert(++i);
5             }
6             return bbb;
7         }
8         aaa()();                 //   3

js 함수 역할 영역 이 있 음 을 알 수 있 습 니 다. 부모 대상 의 모든 변 수 는 하위 대상 에 대해 볼 수 있 지만 반대로 성립 되 지 않 습 니 다!
함수 aaa 는 함수 bbb 를 끼 워 넣 었 습 니 다. 역할 영역 에 따라 함수 외 부 는 함수 aaa 내 변수 i 에 접근 할 수 없 지만 이때 3 이 팝 업 되 었 습 니 다.왜 일 까? 이것 이 바로 폐쇄 적 인 존재 로 인 한 것 이다.aaa 함수 호출 은 최종 적 으로 함수 bbb 를 되 돌려 줍 니 다. 우 리 는 aaa 호출 결 과 를 하나의 변수 에 저장 할 수 있 습 니 다. 이 변 수 를 다음 호출 할 수 있 습 니 다. 예 에서 변 수 를 정의 하지 않 고 직접 aaa () () 입 니 다.즉, aa () 가 가리 키 는 bb 입 니 다.
우 리 는 때때로 함수 내의 국부 변 수 를 얻어 야 한다.그러나 정상 적 인 상황 에서 이것 은 할 수 없 는 것 입 니 다. 함수 내부 에서 하나의 함 수 를 정의 하 는 것 만 이 함수 가 부모 급 변수 와 매개 변 수 를 방문 하기 때 문 입 니 다.
하나의 실례 를 통 해 다음 과 같이 설명 한다.
만약 에 5 개의 li 를 만 들 면 우 리 는 어떤 li 를 클릭 하여 이 li 의 색인 을 얻 고 싶 습 니 다. 누 군 가 는 다음 방법 을 시험 해 볼 것 입 니 다. 그러나 의외로 이 방법 으로 팝 업 한 결 과 는 모두 5 입 니 다. 자신의 색인 에 따라 나 온 것 이 아니 라 이유 도 간단 합 니 다. i 를 팝 업 하 는 그 함 수 는 하나의 클릭 이벤트 에 연결 되 어 있 습 니 다. 클릭 하지 않 으 면 사건 이 촉발 되 지 않 습 니 다.그러나 클릭 할 때 for 순환 을 통 해 I 의 값 은 5 로 초기 화 되 었 습 니 다. 팝 업 할 때마다 5 이지 만;
 
    window.onload = function(){
        var li = document.getElementsByTagName('li');
        for(var i=0; i<li.length; i++){
 li[i].onclick = function(){ alert(i); }
        }
    }

그럼 무슨 해결 방법 이 있 습 니까? 코드 를 보 세 요.
    window.onload = function(){
        var li = document.getElementsByTagName('li');
        for(var i=0; i<li.length; i++){
(
function(index){ li[i].onclick = function(){ alert(index); } })(i);
} }
 

코드 에 굵 은 부분 을 넣 는 것 은 바로 사용 하 는 폐쇄 이다.
이 방법 을 통 해 모든 li 의 색인 값 을 얻 을 수 있 습 니 다. 순환 할 때 i 는 매개 변수 가 실 행 된 함수 에 전 달 될 때 i 는 바로 당신 이 필요 로 하 는 i 입 니 다.
폐쇄 적 인 용도 가 아직 많 으 니 다음 에 말 하 자.

좋은 웹페이지 즐겨찾기