호출 스케줄링
일정시간이 지난 후 원하는 함수의 호출을 예약하는 것을 호출 스케줄링(scheduling a call) 이라고 함.
setTimeout과 setInterval을 이용하여 호출 스케줄링을 실행할 수 있지만 두 함수는 아래와 같은 차이가 있음.
- setTimeout: 일정시간이 지난 후 함수를 한번 호출함
- setInterval: 일정시간 간격을 두어 함수를 지속적으로 호출함
setTimeout
setTimeout은 아래와 같이 사용할 수 있음
setTimeout( func[ , dely, arg1, arg2 ... ] )
- func: 전달할 함수
- delay: 실행 전 대기시간. miliseconds 단위 (기본값은 0)
- arg: 함수에 전달할 인자
setTimeout으로 몇초후 실행되었는지 콘솔에 출력
function timeout(time){
console.log(`${new Date().getSeconds() - time } 초 후 실행`)
}
let now_sec = new Date().getSeconds();
let time_out = setTimeout(timeout,2000,now_sec);
time_out;
clearTimeout(timeoutFunc)을 사용하면 스케줄링을 취소시킬 수 있음
function timeout(time){
console.log(`${new Date().getSeconds() - time } 초 후 실행`)
}
let now_sec = new Date().getSeconds();
let time_out = setTimeout(timeout,2000,now_sec);
time_out;
clearTimeout(time_out);
console.log("스케줄링이 취소됨");
setInterval
setInterval은 setTimeout과 다르게 지정한 시간만큼 간격을 두어 지속적으로 전달한 함수를 실행함
setInterval은 setTimeout과 같은 문법으로 사용할 수 있음
setInterval( func[ , dely, arg1, arg2 ... ] )
setInterval을 이용하여 함수를 지속적으로 실행(clearInterval은 interval로 생성한 스케줄링을 취소할 수 있음)
let cnt = 0;
function addCnt(){
cnt++;
console.log(`${cnt}`);
}
let interval = setInterval(addCnt,1000); // 1초마다 addCnt함수를 호출
//setTimeout에 clearInterval함수를 전달하여 5초후 interval 종료하도록 설정
setTimeout(clearInterval,5000,interval);
중첩 setTimeout
setTimeout을 중첩으로 사용하면 setInterval과 같이 함수를 지속적으로 실행시킬 수 있음
위의 interval과 같이 1초간격으로 5초간 함수를 지속적으로 실행
let cnt = 0;
let timeout = setTimeout(function addCount(){
if(cnt === 5){
console.log(`스케줄링 종료`);
}else{
cnt++;
console.log(`count : ${cnt}`);
timeout = setTimeout(addCount,1000)
}
},1000);
setInterval 과 중첩 setTimeout의 차이점은 아래와 같음
- setInterval: setInterval은 함수의 로직이 실행되는데 소모되는 시간도 지연 시간에 포함시킴
- 중첩 setTimeout: setTimeout은 함수가 종료된 시점부터 지연 시간으로 인식
위와 같은 차이로 인해 setInterval로 함수를 지속적으로 스케줄링 시 함수 호출 사이의 간격이 실제 명시한 시간보다 짧아질 수 있음
참조: https://ko.javascript.info/settimeout-setinterval
'JavaScript > JavaScript기초' 카테고리의 다른 글
[Javascript] 함수 바인딩 (0) | 2021.09.27 |
---|---|
[Javascript] 데코레이터, 포워딩과 call/apply (0) | 2021.09.27 |
[Javascript] 재귀와 스택 (0) | 2021.09.16 |
[Javascript] 전역객체 (0) | 2021.09.10 |
[Javascript] new Function 문법 (0) | 2021.09.09 |