본문 바로가기
JavaScript

setInterval과 addEventListener

by whoyoung90 2022. 3. 31.
반응형

🚩clearInterval과 removeEventListener는 종료 대상이 다르다.

clearInterval =>  setInterval 자체를 종료
removeEventListener =>  콜백함수를 종료

 

1.  window 메서드 (setInterval)

setInterval 자체를 종료한다. clearInterval(intervalID)

/* 지역변수 num을 참조하는 내부함수를 외부로 전달했으므로 클로저 */
(function() {
  let num = 0;
  let intervalID = null;

  intervalID = setInterval(function(){
    if (++num >= 5) {
      clearInterval(intervalID);
    }
    console.log(num);
  }, 100);
})();

// 1 2 3 4 5
// 콜백함수 inner로 분리하면
(function() {
  let num = 0;
  let intervalID = null;
  
  let inner = function(){
    if (++num >= 5) {
      clearInterval(intervalID); // setInterval 자체를 종료
    }
    console.log(num);
  };
  intervalID = setInterval(inner, 100);
})();

 

2.  DOM 메서드 (addEventListener)

콜백함수를 종료한다. removeEventListener('click', inner)

/* 지역변수 count를 참조하는 내부함수를 외부로 전달했으므로 클로저 */
(function() {
  let count = 0;
  let button = document.createElement('button');
  button.innerText = '클릭';
  
  button.addEventListener('click', function(){
    console.log(++count, '번 클릭했습니다.');
    if (count >= 5) {
      button.removeEventListener('click', function(){}) // 콜백함수를 종료해야하는데.. 뭘 적지??
    }
  });
  document.body.appendChild(button);
})();
// 콜백함수 inner를 선언해서 해결
(function() {
  let count = 0;
  let button = document.createElement('button');
  button.innerText = '클릭';
  
  let inner = function(){
    console.log(++count, '번 클릭했습니다.');
    if (count >= 5) {
      button.removeEventListener('click', inner) // 콜백함수를 종료
    }
  };
  button.addEventListener('click', inner);
  document.body.appendChild(button);
})();

 

 

반응형

'JavaScript' 카테고리의 다른 글

클로저 활용 예시 (2)  (0) 2022.05.01
클로저 활용 예시 (1)  (0) 2022.03.31
클로저 (Closure)  (0) 2022.03.30
콜백 함수도 함수로서 호출이다  (1) 2022.02.26
forEach / for-in / for-of 차이점  (0) 2022.01.31

댓글