# JS Quiz: Medium: Optional chaining with side effects

**URL:** <https://forum.kirupa.com/t/js-quiz-medium-optional-chaining-with-side-effects/681039>\
**Category:** web dev\
**Created:** [May 1, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-medium-optional-chaining-with-side-effects/681039 "2026-05-01T07:00:11Z")\
**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:** [May 1, 2026, 7:00am UTC](https://forum.kirupa.com/t/js-quiz-medium-optional-chaining-with-side-effects/681039/1 "2026-05-01T07:00:11Z")

</div>

What is printed by the final console.log?

```js
const x = {
  value: 0,
  inc() {
    this.value++;
    return this.value;
  }
};

const a = x.inc?.();
const b = (x.missing?.()) ?? 42;
console.log(a, b, x.value);

```

_Poll ([view on site](https://forum.kirupa.com/t/js-quiz-medium-optional-chaining-with-side-effects/681039/1))_

Quelly

---

<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:** [May 3, 2026, 4:00am UTC](https://forum.kirupa.com/t/js-quiz-medium-optional-chaining-with-side-effects/681039/2 "2026-05-03T04:00:22Z")

</div>

`1 42 1`.

`x.inc?.()` is still a normal _method call_ when `inc` exists, so `this` is `x` and the side effect happens (`value` goes 0 → 1, and `a` is 1). `x.missing?.()` short-circuits to `undefined`, so the `?? 42` kicks in and `b` becomes 42.

Where people get burned is when you detach it first: `const f = x.inc; f?.()` loses the receiver, so `this` isn’t `x` anymore.
