javascript → Интересный способ сброса setTimeout и setInterval
Если нам нужно отменить запуск setTimeout или setInterval, то обычно используем такую конструкцию:
const timeoutId = setTimeout(() => {}, 100);
clearTimeout(timeoutId);
Основное неудобство в запоминании timeoutId, но можно сделать ф-цию обертку, которая позволит нам избавиться от timeoutId:
function timer(cb, timeout) {
const timeoutId = setTimeout(cb, timeout);
return () => clearTimeout(timeoutId);
}
const destroyTimer = timer(()=> {}, 1000);
destroyTimer();
За счет сохранения timeoutId внутри функции за счет замыкания, нам можно забыть о timeoutId
Такой же трюк можно провернуть и с EventListener:
function listen(element, event, cb) {
element.addEventListener(event, cb, false);
return () => element.removeEventListener(event, cb, false);
}
const unlisten = listen(element, 'click', () = {} );
unlisten();