WEB/💡 Javascript

[Javascript] setTimeout을 setInterval처럼 주기적으로 불러오기

무딘붓 2022. 6. 16. 22:58

타임아웃 코드 반복 호출하는 코드로 setInterval()을 사용하는것이 일반적이지만,

이번에는 setTimeout()을 이용하여 setInterval()과 같은 역할을 수행하는 코드를 작성해보기로 한다.

 

먼저,  setInterval()을 이용한 코드를 확인해보자,

10밀리초(=1초) 주기로 changeTime()을 호출하여 현재 시간을 표시하는 간단한 예시이다. 

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>
    <div> <span id="span"></span> </div>

    <script>
        let span = document.getElementById("span");
        let timerID = setInterval("changeTime()", 10); // 10밀리초 주기로 changeTime() 호출

        function changeTime() {
            let str = span.innerHTML;
            let newtime = new Date();
            span.innerHTML = newtime.getHours() + ":" + newtime.getMinutes() + ":" + newtime.getSeconds();
        }
    </script>

</body>

</html>

setTimeout()을 이용하여 이와 동일한 결과물을 만들어 내는 것은 간단하다.

바로 setTimeout()을 재귀적으로 사용하면 된다.

아래는 재귀적으로 setTimeout()을 사용하여 위의 코드와 동일한 결과물을 만드는 코드이다.

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>
    <div> <span id="span"></span> </div>

    <script>
        let span = document.getElementById("span");        

        function changeTime() {
            let str = span.innerHTML;
            let newtime = new Date();
            span.innerHTML = newtime.getHours() + ":" + newtime.getMinutes() + ":" + newtime.getSeconds();
            let timerID = setTimeout("changeTime()", 10); // 10밀리초 주기로 changeTime() 호출
        }
        changeTime();
    </script>

</body>

</html>

이와같이 재귀를 사용하면 setTimeout()도 주기적으로 불러와서 사용할 수 있다.

 

특정 횟수만 반복하게 하려면, 별도의 변수를 추가해서 changeTime()이 실행될때마다 변수값을 증가시킨 다음,

변수가 특정 값이 되면 clearTimeout(TimerID)을 실행시켜 타이머를 종료시키면 된다.