자 바스 크 립 트 의 패키지

자원 이 풀 려 나 지 않 은 스 택 구역 과 사전 실행 과정 이 무엇 인지 가장 흔히 볼 수 있 는 예제 로 설명 합 니 다.예 를 들 어 지금 우 리 는 ul 이 있 습 니 다.아래 에 많은 li 가 있 습 니 다.그들 이 연결 되 어 이 벤트 를 클릭 하고 클릭 한 후에 현재 아래 표 시 를 다른 function 에 전달 하여 추가 적 인 처 리 를 해 야 합 니 다
 
for(var i=0; i<agroup.length; i++) {
  agroup[i].onclick = function() {
    handler(i);
  }
}
실행 결 과 는 분명 합 니 다.그 렇 죠?handler 에서 과 거 를 전달 하 는 매개 변수 i 를 가 져 옵 니 다.당신 이 본 것 은 모두 가장 큰 아래 표 시 됩 니 다.이때 우 리 는 보통 아래 의 방법 으로 해결 합 니 다
 
for(var i=0; i<agroup.length; i++) {
  agroup[i].i = i
  agroup[i].onclick = function() {
    handler(this.i);
  }
}
그러면 여기 서 this 의 지향 문 제 를 먼저 말씀 드 리 겠 습 니 다.일반적으로 자바 script 중의 this 는 앞에서 그의 대상 을 인용 하 는 것 을 가리 키 고 있 습 니 다.위 에서 우 리 는 this 에 i 라 는 속성 을 추 가 했 습 니 다.그의 값 은 현재 의 아래 값 입 니 다.그렇다면 폐쇄 적 인 방식 으로 이 문 제 를 어떻게 해결 할 것 인가?사실은 원리 가 같 습 니 다.우 리 는 i 값 을 미리 저장 하거나 전달 이 라 고 불 러 야 합 니 다
 
for(var i=0; i<agroup.length; i++) {
  agroup[i].onclick = function(index) {
    return function() {
      handler(index);
    }
  }(i);
}
이때 당신 은 정확 한 하 표를 얻 을 수 있 습 니 다.이렇게 하 는 것 은 i 속성 을 증가 하 는 것 과 어떤 공통점 이 있 습 니까?즉,그들 은 모두 아래 표 시 된 i 값 을 미리 전달 하거나 저장 하 는 것 이다.위의 프 리 젠 테 이 션 에서 onclick 이 인용 한 함 수 를 미리 실행 합 니 다.이 함수 에서 내장 함 수 를 되 돌려 자원 이 방출 되 지 않 은 스 택 구역 을 형성 하고 미리 실행 할 때 i 값 을 매개 변수 로 이 역할 영역 에 전달 합 니 다(해석 능력 에 문제 가 있 습 니 다.이 설명 이 정확 한 지 모 르 겠 습 니 다.벽돌 촬영 을 환영 합 니 다).다시 말 하면 폐쇄 적 인 역할 은 역할 영역 을 바 꾸 거나 미리 집행 하 는 것 이다.위 에서 제시 한 예 는 한계 가 있 고 폐쇄 적 인 응용 범위 가 넓 으 며 그 인 과 를 이해 해 야 유연 하 게 사용 할 수 있다 는 것 을 잘 알 아야 한다.auntion 2011-11-15 mail [email protected] 82874972 오리지널 글,타자 의 노고 와 작가 의 권익 을 존중 하고,전재 시 이곳 의 작가 정 보 를 삭제 하지 마 십시오.

좋은 웹페이지 즐겨찾기