Tengo el siguiente bucle:
for (let i = 100; i > 1; i++) { console.log(i); i = 1; }Cuando vuelvo a entrar en el bucle for, es 1, por lo que la condición i > 1 es falsa, pero sigue repitiéndose infinitamente e imprimiendo 2.
También probé con i !== 1 y/o ++i pero sucede lo mismo.
Mismo comportamiento en otros idiomas:
for (int i = 100; i > 1; i++) { std::cout << i << std::endl; i = 1; }Producción:
... 2 2 2 ...Por lo que sé, la operación de incremento no debería ocurrir si la condición es falsa.
La sintaxis de un bucle for es:
for ([initialization]; [condition]; [final-expression]) statement (citando de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for ), la final-expression es:
" Una expresión que se evaluará al final de cada iteración del ciclo . Esto ocurre antes de la siguiente evaluación de la condición. Generalmente se usa para actualizar o incrementar la variable del contador. "
Su bloque de declaraciones finaliza con la configuración de i en 1. Antes de ingresar a la siguiente iteración, la final-expression del bucle realiza el incremento, por lo tanto, establece i en 2 antes de repetir el bloque de declaraciones.
Entonces, lo que entiendo de la respuesta de Dave es que lo que sucede dentro del ciclo for es:
for (let i = 100; i > 1;) { console.log(i); i = 1; i++; }y no:
for (let i = 100; i > 1;) { i++; console.log(i); i = 1; }