Front-end/JavaScript
[JavaScript] setTimeout과 setInterval을 이용한 호출 스케줄링
Nave
2022. 5. 9. 02:06
'호출 스케줄링(scheduleing a call)'이란 일정 시간이 지난 후에 원하는 함수를 예약실행 할 수 있게 하는 것.
1. setTimeout
let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...)
//func|code :실행하고자 하느 코드로, 함수 또는 문자열 형태. 이 자리에는 함수가 들어감
//[delay] :실행 전 대기시간으로 단위는 밀리초, 기본값은 0
// [arg1], [arg2], ... :함수에 전달될 인수들
function sayHi(who, phrase) {
alert( who + ' 님, ' + phrase );
}
setTimeout(sayHi, 1000, "이서영", "안녕하세요.");
//1초뒤에 '이서영님, 안녕하세요' 가 출력됨
setTimeout("alert('안녕하세요.')", 1000);
// setTimeout의 첫 번째 인수가 문자열이면 자바스크립트는 이 문자열을 이용해 함수를 만든다.
//하지만 이 방법보다는 화살표 함수를 사용하는 것을 추천!!
setTimeout(() => alert('안녕하세요.'), 1000);
2. clearTimeout으로 스케줄링 취소하기
setTimeout을 호출하면 '타이머 식별자'가 반환되는데, (아래 코드에서는 timeId가 타이머식별자임) clearTimeout에 타이머식별자를 넣어서 setTimeout을 취소할 수 있다.
let timerId = setTimeout(...);
clearTimeout(timerId);
3. setInterval
setTimeout함수와 달리, 함수를 주기적으로 실행한다.
let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...)
//setTimeout함수와 동작방식은 동일
함수 호출을 중단하려면 clearInterval(timeId)을 사용하면 됨.
let timerId = setInterval(() => alert('싸발'), 2000);
// 정지
clearInterval(timerId);
4. 중첩 setTimeout
setInterval함수 말고 일정 간격으로 함수를 실행하는 방법
let timerId = setTimeout(function tick() {
alert('싸발싸발');
timerId = setTimeout(tick, 2000);
}, 2000);
// 2초후에 tick함수를 실행하게 되는데, tick함수도 2초후에 ('싸발싸발')출려하는 함수이기 때문에
//결과적으로 계속해서 2초마다 '싸발싸발'이 출력됨
5. 대기시간이 0인 setTimeout
setTimeout(func, 0) 이나 setTimeout(func)을 사용하면 setTimeout의 대기시간을 0으로 설정할 수 있다.
이런 특징을 이용하면 현재 스크립트 실행이 종료된 '직후에' 원하는 함수가 실행될 수 있게 할 수 있다.
setTimeout(() => alert("World"));
alert("Hello");
//"Hello"
//"World"
--> setTimeout(()=>alert("World")); 의 의미는 '0밀리초 후에 함수호출하기' 라는 할 일을 '계획표에 기록' 해주는 역할이다.
그런데 스케줄러는 현재 스크립트(alert Hello)의 실행이 종료되고 나서야 '계획표에 어떤 할 일이 적혀있는지 확인하므로 Hello 가 먼저 World가 그 다음에 출력된다.