¿Qué valores serán mostrados por el bucle while?
Para cada iteración del bucle, escribe qué valor será impreso y luego compáralo con la solución.
Ambos bucles ¿alertan
los mismos valores?
-
La forma de prefijo
++i
:let i = 0; while (++i < 5) alert( i );
-
La forma de sufijo
i++
let i = 0; while (i++ < 5) alert( i );
La tarea demuestra cómo las formas de sufijo y prefijo pueden llevar a diferentes resultados cuando son usadas en comparaciones.
-
Del 1 al 4
let i = 0; while (++i < 5) alert( i );
El primer valor es
i = 1
, porque++i
primero incrementai
y luego retorna el valor nuevo. Así que la primera comparación es1 < 5
y elalert
muestra1
.Entonces siguen
2, 3, 4…
– los valores son mostrados uno tras otro. La comparación siempre usa el valor incrementado, porque++
está antes de la variable.Finalmente,
i = 4
es incrementada a5
, la comparaciónwhile(5 < 5)
falla, y el bucle se detiene. Así que5
no es mostrado. -
Del 1 al 5
let i = 0; while (i++ < 5) alert( i );
El primer valor es de nuevo
i = 1
. La forma del sufijo dei++
incrementai
y luego retorna el valor viejo, así que la comparacióni++ < 5
usarái = 0
(contrario a++i < 5
).Pero la llamada a
alert
está separada. Es otra declaración, la cual se ejecuta luego del incremento y la comparación. Así que obtiene eli = 1
actual.Luego siguen
2, 3, 4…
Detengámonos en
i = 4
. La forma del prefijo++i
lo incrementaría y usaría5
en la comparación. Pero aquí tenemos la forma del sufijoi++
. Así que incrementai
a5
, pero retorna el valor viejo. Por lo tanto, la comparación es en realidadwhile(4 < 5)
– verdadero, y el control sigue aalert
.El valor
i = 5
es el último, porque el siguiente pasowhile(5 < 5)
es falso.