La salida de console.log(in1()) debería ser 11 pero es 10 ¿por qué?
function outer() { let i = 10; return function inner() { return i++; } } var in1 = outer(); console.log(in1());Citando https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment aquí:
Si se usa postfijo, con operador después del operando (por ejemplo, x++), el operador de incremento incrementa y devuelve el valor antes de incrementar.
Por lo tanto, el operador sufijo (es decir, x++; sufijo porque aparece después de ) solo da el valor existente antes de hacer nada. Por eso, cuando se llama, da lo que existe, no lo que es el resultado de la suma.
Debido a esto, use el operador de prefijo en su lugar, ++x, para obtener el valor mientras sigue incrementando la variable.
Lo mismo se aplica al operador de decremento.
Es porque usar i++ devuelve i primero, luego agrega 1 a i . Si llama a in1() la segunda vez, verá 11, 12 y así sucesivamente. Intenta usar ++i en su lugar.
Cuando se usa la sintaxis de sufijo i++ , el valor se devuelve antes de incrementar. Use la sintaxis de prefijo en lugar ++i .