-
Notifications
You must be signed in to change notification settings - Fork 3
41. 타이머
fireyw edited this page Jan 16, 2022
·
1 revision
- setTimeout
- delay 시간 후에 단 한번 동작하는 타이머를 생성한다
const timeoutId = setTimeout(func|code[,delay, param1, param2,...]);
- func : 타이머가 만료된 뒤 호출될 콜백 함수
- delay: delay시간만큼 지연된 후 동작하는 타이머를 생성
- param1:콜백 함수에 전달해야할 인수가 존재할 경우 전달
//1초뒤에 실행
setTimeout(()=>console.log('hi'),1000);
setTimeout(name=>console.log(`hi! ${name}.`),1000, 'Lee');
- clearTimeout: 호출 스케쥴링을 취소한다
//setTimeout함수는 생성된 타이머를 식별할 수 있는 고유한 타이머 id를 반환
const timerId=setTimeout(()=>console.log('hi'),1000);
clearTimeout(timerId);
- setInterval
- delay 시간만큼 반복동작하는 타이머 생성
- 타이머가 취소될 때까지 계속된다
let count = 1;
//clearInterval 타이머id를 통해 타이머를 취소 할 수 있다
const timeoutId = setInterval(() => {
console.log(count);
if (count++ === 5) clearInterval(timeoutId);
}, 1000)
- 디바운스(debounce)
- 짧은 시간 간격으로 발생하는 이벤트를 그룹화하여 마지막에 한번만 이벤트 핸들러가 실행되게 함
- 쇼핑몰 연관 검색어 추천에서 사용됨
- Underscore의 debounce함수나 Lodash의 debounce함수를 추천
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text">
<div class="msg"></div>
<script>
const $input = document.querySelector('input');
const $msg = document.querySelector('.msg');
//debounce 함수는 tiemrId를 기억하는 클로저 반환
const debounce = (callback, delay )=>{
let timerId;
return event =>{
if(timerId) clearTimeout(timerId)
timerId=setTimeout(callback, delay, event)
}
}
//debounce 함수가 반환하는 클로저가 이벤트 핸들러로 등록된다
//300ms보다 짧은 간격으로 input 이벤트가 발생하면 호출 안하고
//300ms동안 이벤트가 더이상 발생하지 않으면 한 번만 호출된다
$input.oninput= debounce(e=>{
$msg.textContent = e.target.value;
}, 300)
</script>
</body>
</html>