이 기사는 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 비디오 튜토리얼을 방문하세요!
관련 추천:
위 내용은 IE9 이전 버전의 JavaScript의 메모리 누수 문제를 요약합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!