사건 대 리 를 잘 활용 하여 폐쇄 적 인 성능 함정 을 경계 하 다.

쉽게 말 하면 폐쇄 는 자원 이 방출 되 지 않 은 스 택 을 만 드 는 것 이다.다시 말 하면 제어 할 수 없 는 메모리 공간 을 차지 하 는 것 이다.사건 과 관련 이 있 으 면 JS 의 쓰레기 회수 메커니즘 도 이 지역 에 닿 지 않 는 다.예 를 들 어 저 희 는 div 에 수백 개의 핫 이 슈 구역(a 태그)이 있 고 타 오 바 오 점포 의 광고 위치 사용자 정의 와 유사 한 프로젝트 가 있 습 니 다.그러면 전통 적 인 방법 에 따라 저 희 는 다음 과 같이 가장 전형 적 인 패 킷 사용 사례 를 만 들 것 입 니 다.목적 은 this 의 역할 영역 을 바 꾸 고 처리 함수 내부 에서 이 역할 영역 에 속 하 는 다른 방법 이나 속성 을 호출 하 는 것 입 니 다
 
var apply = function() {
  this.div = document.getElementById("div id");
  this.hot = this.div.getElementsByTagName("a");
  for(var i=0; i<this.hot.length; i++) {
    this.hot[i].onclick = function(me) {
      return function() {
        me.edit(this);
      }
    }(this);
  }
}
apply.prototype = {
  edit: function(target) {
  }
}
여기 서 발생 하 는 문 제 는 매번 의 순환 입 니 다.위 에서 설명 한 제어 할 수 없 는 메모리 주 소 를 메모리 에 기록 합 니 다.물론 찾 을 수 없고 사용 할 필요 가 없 을 때 정리 할 수 없습니다.js 의 회수 체 제 는 그 가 언제 쓸모 가 없 는 지 모 르 고 쓰레기 주소 가 발생 합 니 다.그리고 div 내 dom 구조 가 바 뀌 었 을 때 이 a 라벨 을 다시 찾 아서 연결 해 야 합 니 다.물론 이것 을 부분 변수 에 추가 할 수 있 습 니 다:var me=this;적어도 이렇게 하면 제어 할 수 있 습 니 다.국부 변수 me 를 null 로 수시로 설정 할 수 있 습 니 다.js 의 쓰레기 회수 체 제 는 이런 쓸모없는 데 이 터 를 언제 치 울 지 알 수 있 습 니 다.그러나 이것 도 최선 의 해결 방안 이 아니 며,많은 사람들 이 이런 아름 답지 않 은 인 코딩 방식 을 좋아 하지 않 을 것 으로 예상 된다.가장 좋 은 해결 방법 은 물론 내부 의 구조 에 관심 을 가 질 필요 도 없고 내부 의 어떤 요소 에 도 변 수 를 밝 히 지 않 는 다.그러면 사건 대리 의 업무 이다.이벤트 에이전트 란 무엇 입 니까?즉,모든 하위 대상 에 게 이 벤트 를 연결 할 필요 가 없습니다.거품 메커니즘 을 통 해 현재 트리거 이벤트 의 요 소 를 찾 고 자신의 일련의 규칙 을 통 해 최종 처리 함 수 를 찾 을 수 있 습 니 다.이벤트 에이전트 모드 를 사용 하면 위 에서 설명 한 수 요 를 어떻게 실현 해 야 합 니까?다음 과 같다
 
var apply = function() {
  this.div = document.getElementById("div id");
  this.div.onclick = function(me) {
    return function() {
      var _event = arguments.callee.caller.arguments[0];
      var target = _event.target || _event.srcElement;
      if(target.tagName == "a")
        me.edit(target);
      else
        return false;
    }
  }(this);
}
apply.prototype = {
  edit: function(target) {
  }
}
지금 우 리 는 용기 요소 가 무엇 인지 에 만 관심 을 가지 고 그의 내부 에 몇 개의 a 가 있 는 지,그들 이 변화 하 는 지 등에 관심 을 가지 지 않 는 다.성능 의 차 이 는 분명 하 다.10 분 동안 마음대로 쓰 면 좀 혼 란 스 럽 습 니 다.몇몇 친구 들 에 게 유용 하 기 를 바 랍 니 다.만약 착오 가 있 으 면 여러분 의 지 도 를 바 랍 니 다.auntion / 2011-11-15 mail [email protected] 82874972 오리지널 글,이 부분 을 남 겨 주세요.

좋은 웹페이지 즐겨찾기