0
let a = 70;
a++; // This returns the value before incrementing.
console.log(a) // returns 71

Can someone explain to me why this doesn't return 70, please?

let b = 70;
++b; // Using it as a prefix returns the value after incrementing.
console.log(b) // returns 71

I understand how prefix works.

I have read explanations and watched videos on this subject but it's still confusing to me. Thank You.

tony K
  • 5
  • 2

3 Answers3

0

"return" isn't the right term (functions return, expressions do not).

a++ evaluates as the value before incrementing.

You aren't looking at the value the expression evaluates as, you are just looking at the value of the variable after the increment.

let a = 70;
let result_of_a_plus_plus = a++; // This evaluates as the value before incrementing.


let b = 70;
let result_of_plus_plus_b = ++b; // Using it as a prefix increments the value before the expression is evaluated.

console.log({
  a,
  result_of_a_plus_plus,
  b,
  result_of_plus_plus_b
});
Quentin
  • 914,110
  • 126
  • 1,211
  • 1,335
  • 1
    MDN uses the term "return". The distinction between returning and evaluating to is not really important. – Barmar May 03 '22 at 21:03
  • E.g. "If used postfix, with operator after operand (for example, x++), the increment operator increments and returns the value before incrementing." – Barmar May 03 '22 at 21:04
0

Both versions of them increment the value they're applied to. If you do nothing with the value of the increment expression itself, they're equivalent, both of them doing the same thing as i += 1. The only time it matters is when you use the result of the increment expression:

let a = 70;
console.log(a++); // outputs 70, the old value of a, but a will be 71 afterwards
console.log(a)    // outputs 71; no matter how you increment, after the increment, the value has changed

let b = 70;
console.log(++b); // outputs 71; the new value of b is produced
console.log(b)    // outputs 71; same as in case a
ShadowRanger
  • 143,180
  • 12
  • 188
  • 271
0

The difference you are trying to notice is only visible when you use these prefix/postfix operators inline, something like this:

let a = 5;
console.log(a++);
let b = 5;
console.log(++b);