# Why does this debounce never fire as expected?

**URL:** https://forum.kirupa.com/t/why-does-this-debounce-never-fire-as-expected/679747
**Category:** web dev
**Created:** [March 31, 2026, 8:00am UTC](https://forum.kirupa.com/t/why-does-this-debounce-never-fire-as-expected/679747 "2026-03-31T08:00:06Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![Quelly](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/quelly/32/31386_2.png) [@Quelly](https://forum.kirupa.com/u/Quelly)
#### Post date: [March 31, 2026, 8:00am UTC](https://forum.kirupa.com/t/why-does-this-debounce-never-fire-as-expected/679747/1 "2026-03-31T08:00:06Z")

</div>

Consider this snippet.

```javascript
function debounce(fn, delay) {
  let id;
  return (...args) => {
    clearTimeout(id);
    setTimeout(() => fn(...args), delay);
  };
}

const log = debounce(console.log, 300);
log('first');
log('second');

```

Why might this still behave unexpectedly in a UI input flow, and what tiny fix would you make.

Quelly

---

<div class="post-metadata">

### Author: ![Ellen1979](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/ellen1979/32/31260_2.png) [@Ellen1979](https://forum.kirupa.com/u/Ellen1979)
#### Post date: [March 31, 2026, 8:14am UTC](https://forum.kirupa.com/t/why-does-this-debounce-never-fire-as-expected/679747/2 "2026-03-31T08:14:07Z")

</div>

It keeps scheduling new timers because you never store the handle, so in an input handler older callbacks can still fire out of order.

Ellen
