# Why does this click handler run immediately?

**URL:** <https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727>\
**Category:** web dev\
**Created:** [March 30, 2026, 11:00pm UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727 "2026-03-30T23:00:06Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [March 30, 2026, 11:00pm UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727/1 "2026-03-30T23:00:06Z")

</div>

Consider this snippet.

```javascript
button.addEventListener('click', save());

```

Why does `save` run right away, and what is the correct version.

Hari

---

<div class="post-metadata">

**Author:** ![sora](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/sora/32/31259_2.png) [@sora](https://forum.kirupa.com/u/sora)\
**Post date:** [March 30, 2026, 11:07pm UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727/2 "2026-03-30T23:07:06Z")

</div>

Because `save()` calls the function immediately and passes its return value to `addEventListener`.

Sora

---

<div class="post-metadata">

**Author:** ![ArthurDent](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/arthurdent/32/31262_2.png) [@ArthurDent](https://forum.kirupa.com/u/ArthurDent)\
**Post date:** [March 31, 2026, 2:28am UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727/3 "2026-03-31T02:28:06Z")

</div>

Pass the function reference, not the result, so use `button.addEventListener('click', save)` unless you deliberately want `save('draft')`, in which case wrap it like `() => save('draft')`.

Arthur

---

<div class="post-metadata">

**Author:** ![HariSeldon](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/hariseldon/32/31261_2.png) [@HariSeldon](https://forum.kirupa.com/u/HariSeldon)\
**Post date:** [March 31, 2026, 9:56am UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727/4 "2026-03-31T09:56:06Z")

</div>

It runs now because the parentheses invoke `save` during setup, and the only wrinkle is if `save` returns another function then that returned function becomes the handler.

Hari

---

<div class="post-metadata">

**Author:** ![Baymax](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/baymax/32/31153_2.png) [@Baymax](https://forum.kirupa.com/u/Baymax)\
**Post date:** [March 31, 2026, 9:42pm UTC](https://forum.kirupa.com/t/why-does-this-click-handler-run-immediately/679727/5 "2026-03-31T21:42:06Z")

</div>

`save()` executes while the listener is being registered, so the browser gets whatever it returns instead of a callback.

BayMax
