728x90
반응형
function printMessage(){
const value = messageInput.value();
}
function addListener(){
btn1.addEnverntListener('click', printMessage);
}
btn2.addEventListener('click', addListener);
함수를 정의하면 브라우저의 힙 메모리에 저장되어 하나만 존재하게 된다.
위의 click listener 함수는 해당 함수에 대한 참조값을 지니게 되고, 이미 등록된 함수중에 참조가 있으면 추가하지 않는다.
단, 익명함수로 추가하게 되면 실행될 때 마다 힙에 새롭게 추가된다.(서로 다른 참조값을 가진다.)
const els = document.getElementsByTagName('*');
// 상황 1
for(let i=0 ; i < els.length; i++){
els[i].addEventListener("click", function(e){/*do something*/}, false);
}
// 상황 2
function processEvent(e){
/* do something */
}
for(let i=0 ; i < els.length; i++){
els[i].addEventListener("click", processEvent, false);
}
- 상황 1의 경우에는 반복문의 매 반복마다 새로운 익명 처리기 함수가 생성된다.
- 익명 함수에 대한 참조를 유지하지 않으므로 removeEventListener()를 호출할 수 없다.
- 반면 상황 2에서는 사전에 정의한 함수를 이벤트 처리기로 사용하므로 처리기 함수를 하나만 사용하고, 따라서 더 작은 메모리 공간만 사용합니다.
- processEvent가 처리기 함수를 가리키므로 myElement.removeEventListener("click", processEvent, false)를 할 수 있다.
728x90
반응형
'🌳Frontend > etc' 카테고리의 다른 글
자바스크립트의 참조에 의한 객체 복사 (0) | 2023.04.13 |
---|---|
자바스크립트 메모리 누수 관리 및 개선 (0) | 2023.04.11 |
[JS 문제] Array Sort Comparison / 배열의 동등비교 (0) | 2023.03.26 |
프론트엔드 개발자라면 알아야할 : Webpack 심화 (0) | 2023.03.24 |
프론트엔드 개발자라면 알아야할 : Webpack 기본 (0) | 2023.03.24 |