>  기사  >  웹 프론트엔드  >  IE9 이전 버전의 JavaScript의 메모리 누수 문제를 요약합니다.

IE9 이전 버전의 JavaScript의 메모리 누수 문제를 요약합니다.

青灯夜游
青灯夜游앞으로
2018-10-09 14:38:171982검색

이 기사는 IE9 이전 버전의 JavaScript의 메모리 누수 문제를 요약합니다. 이에 관심이 있는 친구는 이에 대해 배울 수 있습니다.

IE9 이전 버전에서는 JScript 개체와 COM 개체에 대해 서로 다른 가비지 수집 루틴을 사용하므로(COM 개체는 "참조 계산" 수집 전략을 사용함) 이러한 IE 버전의 질문에서 클로저로 인해 몇 가지 특별한 문제가 발생합니다. 특히, HTML 요소가 클로저 범위에 저장되면 해당 요소가 파괴될 수 없음을 의미합니다.
다음 예를 보세요:

function assignHandler() {
  var elem = document.getElementById('elem_id');
  elem.onclick = function(evt) {
    alert(elem.id);
  };
}

위 코드는 elem 요소에 대한 이벤트 핸들러로 클로저를 생성하고 이 클로저는 순환 참조를 생성합니다. 익명 함수는 AssignHandler()의 활성 객체에 대한 참조를 저장하므로 요소 참조 수를 줄이는 것은 불가능합니다. 익명 함수가 존재하는 한 elem의 참조 번호는 최소 1이므로 차지하는 메모리는 결코 재활용되지 않습니다.

위 코드를 약간 수정하면 문제를 해결할 수 있습니다.

function assignHandler() {
  var elem = document.getElementById('elem_id');
  var elem_id = elem.id;
  elem.onclick = function(evt) {
    alert(elem_id);
  };
  elem = null;
}

변수에 elem.id의 복사본을 저장하고 변수 참조에서 클로저에서는 참조 순환이 제거됩니다. 하지만 이 단계만으로는 메모리 누수 문제를 해결할 수 없습니다.

"클로저는 elem을 포함하는 함수를 포함하는 전체 활성 개체를 참조합니다. 클로저가 elem을 직접 참조하지 않더라도 참조는 여전히 함수를 포함하는 활성 개체에 저장됩니다. 따라서 , elem을 null로 설정해야 합니다. 이렇게 하면 DOM 개체를 역참조하고 참조 수를 성공적으로 줄이며 차지하는 메모리를 정상적으로 재활용할 수 있습니다.”

요약: 이것이 전부입니다. 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 튜토리얼을 보려면 JavaScript 비디오 튜토리얼을 방문하세요!

관련 추천:

php 공공 복지 교육 동영상 튜토리얼

JavaScript 그래픽 튜토리얼#🎜 🎜#

JavaScript 온라인 설명서

위 내용은 IE9 이전 버전의 JavaScript의 메모리 누수 문제를 요약합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제