• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

interval에 대한 질문입니다.

23.09.21 13:45 작성 23.09.21 13:56 수정 조회수 102

0

let intervalId;
let countdownStart = function () {
  messageContainer.style.display = "none";
  ddayContainer.style.display = "flex";

  counterMaker();

  intervalId = setInterval(counterMaker, 1000);
  console.log(intervalId);
};

let countdownReset = function () {
  ddayContainer.style.display = "none";
  messageContainer.style.display = "flex";
  messageContainer.innerHTML = "<h3>D-day를 입력해 주세요</h3>";

  console.log("reset >> " + intervalId);
  clearInterval(intervalId);
};

intervalId을 전역 변수로 선언해 놓은 후
전역변수 intervalId에 setInterval(counterMaker, 1000) 값을 담은 후에 마지막으로 저장된 intervalId값을 이용해서 
clearInterval(intervalId)을 실행 시켜서 타이머를 중지 시키는 방법은 문제가 있는건가요?
정상 작동 하는 것 처럼 실행이 되긴합니다.

** 마지막으로 동작된 intervalId를 사용하지 않고
동작한 모든 intervalId를 intervalIdArr배열에 담아서 배열 전부를 반복문을 이용해 clearInterval을 하는 이유가 궁금합니다 ** 

답변 2

·

답변을 작성해보세요.

1

안녕하세요! 재석님!

  1. intervalId를 전역변수로 사용하시고, 하위 함수에서 clear 하시는 위 방법의 경우 큰 문제 없이 잘 사용하신 것 같아요!

  2. 하나씩 clear 해주셔도 되고, 한 번에 모두 없애기 위하여 배열에 담아서 진행하셔도 좋습니다!^^

백재석님의 프로필

백재석

질문자

2023.09.26

감사합니다

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.23

안녕하세요, 인프런 AI 인턴이에요.

intervalId을 전역 변수로 선언하고 setInterval을 통해 값을 담은 후 clearInterval로 타이머를 중지시키는 방법은 일반적으로 문제가 없습니다. 단, 변수의 스코프와 생명주기를 고려하여 사용해야 합니다. 예를 들어, intervalId 변수가 다른 함수에서 사용되는 경우, 해당 함수에서 값을 변경하지 않았더라도 다른 값으로 초기화되기 때문에 의도한 대로 작동하지 않을 수 있습니다.

동작한 모든 intervalId를 배열에 담아 clearInterval을 하는 이유는, 여러 개의 타이머가 생성되고 동작 중인 경우 모든 타이머를 정리하고 중지시키기 위해서입니다. 예를 들어, 여러 개의 setInterval 함수가 동시에 실행되고 있다면, 각 setInterval 함수는 고유한 intervalId를 반환합니다. 이렇게 여러 개의 intervalId가 존재할 경우, 모든 intervalId를 배열에 담고 반복문을 통해 clearInterval을 실행하면 모든 타이머가 중지될 수 있습니다.

이런 방식은 주로 동적으로 생성되는 타이머들을 일괄적으로 관리해야 할 때 사용됩니다. 예를 들어, UI 상에서 여러 개의 타이머를 동적으로 생성하고 삭제하는 경우, 각 타이머의 intervalId를 배열에 추가하여 일괄적으로 중지시킬 수 있습니다.

간단한 타이머를 사용하는 경우에는 전역 변수로 선언된 intervalId 하나만 사용해도 충분합니다. 하지만 여러 개의 동시에 실행되는 타이머를 관리해야 할 때는 배열과 반복문을 통한 방법이 유용하게 사용될 수 있습니다.

더 궁금한 사항이 있다면 언제든지 질문해주세요. 좋은 하루 되세요!

백재석님의 프로필

백재석

질문자

2023.09.26

감사합니다