프로그래밍을 하다 보면 특정 이벤트에 딜레이를 걸어줘야 하는 일이 종종 있다.
자바스크립트에서 자주 사용되는 딜레이 메서드인 setInterval과 setTimeout에 대해 알아보자.
이 두 메서드를 사용할 때 주의할 점은, 딜레이 측정이 동시에 진행된다는 점이다.
간단한 소개 이후 실제 예제를 통해 살펴보자.
setTimeout 메서드
함수실행까지 일정 딜레이를 부여하는 기능을 가진 메서드이다.
Timeout은 시간초과를 뜻한다.
메서드 코드형태
setTimeout(함수이름, 지연시간);
이때, 지연시간의 단위는 millisecond(밀리세컨드, 천분의 1초)이다.
만약 함수실행까지 10초의 딜레이를 주고 싶다면 두 번째 인자로 숫자 10,000을 집어넣으면 된다.
setInterval 메서드
함수를 일정 시간마다 반복 실행시켜 주는 기능을 갖는 메서드이다.
Interval은 간격을 뜻한다.
메서드 코드형태
setInterval(함수이름, 시간간격);
시간간격의 단위는 setTimeout 메서드와 마찬가지로 밀리세컨드이다.
주의할 점:
코드는 순차적으로 실행되지만, setTimeout이 끝나야 그 아래의 코드들이 실행되는 것이 아니다.
setTimeout과 setInterval 메서드들의 지연시간은 다 함께 통합된다.
start
*텍스트 변화가 없을시 새로고침을 해주세요
위의 HTML 타이머코드의 의도는 다음과 같다.
1. "start"를 3초 뒤에 숫자 5로 바꾼다
2. 1초마다 숫자가 1씩 감소한다.
3. 숫자가 0이 될 시 출력되는 텍스트를 "boom"으로 바꾼다.
하지만 start가 boom으로 먼저 변한 후
숫자 5로 바뀌는 것을 볼 수 있다.
그 이유는 setTimeout과 setInterval의 지연 시간이 동시에 계산되기 때문이다.
<!-- html 태그요소-->
<h2 id="timer">start</h2>
<script>
// h2의 DOM요소를 변수에 저장한다.
const timer = document.querySelector("h2#timer")
// setTimeout. 3초뒤에 를 숫자 5로 바꾼다.
setTimeout(() => {timer.innerHTML = 5;}, 3000)
// 숫자를 1씩 감소시키는 함수
// 만약 숫자가 0이될시, h2 텍스트를 "boom"으로 번경한다.
function tiktok() {
const tik = parseInt(timer.innerText);
if (tik > 0){
timer.innerHTML = tik - 1;
} else {
timer.innerHTML = "boom"
};
}
// setInterval. 1초마다 tiktok을 실행시킨다.
setInterval(tiktok, 1000);
</script>
이런 문제점은 setTimeout내부에 setInterval을 넣어 해결해 줄 수 있다.
<h2 id="timer">start</h2>
<script>
const timer = document.querySelector("h2#timer")
setTimeout(() => {
timer.innerHTML = 5;
setInterval(tiktok, 1000);
}, 3000);
function tiktok() {
const tik = parseInt(timer.innerText);
if (tik > 0){
timer.innerHTML = tik - 1;
} else if (tik <=0 ){
timer.innerHTML = "boom"
};
}
</script>
이제 3초 뒤에 start가 5로 바뀐 후에
setInterval이 1초마다 실행되는 것을 볼 수 있다.
start
*텍스트 변화가 없을시 새로고침을 해주세요
읽어주셔서 감사합니다
오탈자나 궁금한점은 댓글로남겨주세요.
'it공부 (개념) > javascript' 카테고리의 다른 글
filter(필터): 배열의 성분이 불편해? / 자바스크립트 메서드 (0) | 2023.02.21 |
---|---|
padStart와 padEnd: 자바스크립트 문자열에 패딩을 입혀보자! (0) | 2023.02.20 |
타입스크립트에게 내 자바스크립트 모듈에대한 타입체크 및 함수설명을 시켜보자 / d.ts 파일 (Declaration) (0) | 2023.02.18 |
readonly modifier(readonly제어자): 한번쓰면 수정불가! /타입스크립트 예제 (0) | 2023.02.14 |
abstract Modifier(추상 제어자)란? 개념 및 Typescript예제 (0) | 2023.02.12 |