2012-06-26 23 views
7

Podría estar un poco grueso aquí, pero por favor respóndeme esto. Considere el siguiente código:Confundido sobre while loop en javascript

a=1; 
while(a<=6) { 
    console.log(a); 
    a++; 
} 

Si me quedo este consigo los valores en la consola de 1 a 6, y luego otro 6.

Ahora mira esto:

a=1; 
while(a<=6) { 
    console.log(a); 
    ++a; 
} 

La ejecución de este Ahora obtendré los valores del 1 al 7.

¿Por qué sucede esto? Según entendí, el bloque de declaración solo se ejecutaría si la expresión se evalúa como verdadera. ¿Cómo puede esto ser posible en el segundo de mis ejemplos? ¿Y por qué 6 aparecen dos veces en el primero? Muy confuso para mi

Si puede explicar simplemente (todavía estoy aprendiendo) eso sería genial.

+0

puede mostrar el código completo porque ++ a; y a ++; son iguales si son declaraciones individuales y no compuestas con otras declaraciones. –

+0

Este es el código completo: estoy usando un ejemplo de un libro e intento entender qué está pasando. Lo estoy probando usando las ventanas de la consola tanto de Firefox como de Chrome. Los resultados son los mismos de cualquier manera. –

+2

El segundo ejemplo imprime del 1 al 6 -> http://jsfiddle.net/USYSH/ – ManseUK

Respuesta

13

La consola imprime para usted el valor de la última declaración evaluada. En el segundo caso, se incrementa previamente, por lo que el valor de eso es 7 y no 6 como en el primero.

cambias console.log() llamada a imprimir más cosas y va a ser obvio:

console.log("a is: " + a); 

que no verá ese prefijo en la última línea.

+1

Eso no tiene ningún sentido para mí en absoluto. Si el valor fue 7, ¿por qué está pasando la condición inicial (es decir, a <= 6) ... en mi opinión eso no debería suceder? –

+2

No está pasando la condición inicial. Simplemente sucede que la última instrucción ejecutada es '++ a;' para que la consola la imprima "gratis". – Pointy

+1

@Romil lo siento, pero esa declaración es incorrecta. No son lo mismo en el contexto de la consola de JavaScript del navegador, que siempre imprime el valor del resultado de la declaración. Pruébelo usted mismo desde su navegador ahora mismo. – Pointy

2

En ambos casos, está viendo un dígito adicional porque la consola está produciendo el resultado de la última instrucción en el ciclo.

Cuando ese código no se ejecuta directamente en la consola, no verá lo que parece ser un dígito adicional.

+0

' while' las declaraciones no tienen un "resultado". –

+0

cierto, pero en el contexto de la consola dará salida a la última instrucción – tybro0103

0

Consulte la fiddle con su respuesta. Ambos devuelven 1 a 6.

a ++: Devuelve el valor de una antes de la subasta.

++ a: Devuelve el valor de a después del incremento.

Loops ejecuta hasta que el valor de 'a' < = 6.

Al ejecutar cualquier código en la consola, que dé como el valor de la variable e imprime su valor también es por eso que está recibiendo una más 6 y 7 en el salida.

No se preocupe, cuando ejecute este código, obtendrá los valores 1-6 solamente.

+0

Probablemente debería leer los comentarios. OP pregunta por la salida observada en la 'consola', que generalmente incluirá' 7' para el segundo ejemplo de código. –

+1

Consulte http://jsfiddle.net/eqA8t/. Yo también lo revisé en la consola. Devuelve 6 solamente. :) :) –

+0

Lo que muestra jsfiddle no importa ya que eso no es lo que OP está preguntando. Si escribe el código directamente en la consola, generalmente incluirá el '7'. * (Digo "normalmente" porque puede haber alguna consola que no haga esto). * La pregunta no era del todo clara al respecto, pero los comentarios lo aclararon. –