2011-12-16 25 views
21

Tenga en cuenta el siguiente código JavaScript.¿Por qué no funciona una declaración de retorno de Javascript cuando el valor de retorno está en una nueva línea?

<script language="javascript" type="text/javascript"> 
     function correct() 
     { 
      return 15; 
     } 

     function wrong() 
     { 
      return 
        15; 
     } 

     alert("correct() called : "+correct()); 
     alert("wrong() called : "+wrong()); 

</script> 

El método correct() en el fragmento de código anterior devuelve el valor correcto que es en este caso. El método wrong(), sin embargo, devuelve undefined. Tal no es el caso con la mayoría de los otros idiomas.



La función siguiente es sin embargo correcto y devuelve el valor correcto.

function wrong() 
{ 
    return(
      15); 
} 

Si la sintaxis es incorrecta, debe emitir algún error de compilación pero no es así. ¿Por qué pasó esto?

+4

posible duplicado de [¿Cuáles son las reglas para la inserción automática de punto y coma de Javascript?] (Http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion) –

+1

Esta es una de las razones por las que puse los paréntesis alrededor de mis valores devueltos. – jfriend00

+0

El resultado es 15, no 10 como se muestra. –

Respuesta

37

Técnicamente, semi dos puntos en javascript son opcionales. Pero en realidad solo los inserta para usted en ciertos caracteres de nueva línea si cree que faltan. Pero las decisiones que toma para ti rara vez son lo que realmente deseas.

Y una instrucción return seguida de una nueva línea le dice al intérprete de JS que debe insertarse un punto y coma después de ese return. Por lo tanto, su código real es el siguiente:

function wrong() 
{ 
    return; 
      15; 
} 

Lo cual es obviamente incorrecto. Entonces, ¿por qué funciona esto?

function wrong() 
{ 
    return(
      15); 
} 

Bueno, aquí empezamos una expresión con un proceso abierto (. JS sabe que estamos en el medio de una expresión cuando encuentra la nueva línea y es lo suficientemente inteligente como para no insertar ningún punto y coma en este caso.

+2

No, los puntos y comas son oficialmente parte de la sintaxis y se observa en las producciones sintácticas del lenguaje que sugeriría que los puntos y comas son opcionales. Es solo que el estándar define el comportamiento si se omiten. Entonces, es más como un caso especial ... es como un agregado al estándar. –

+1

Por opcional, quiero decir que el script es analizable sin ellos. A diferencia de muchos otros lenguajes como C o Java que arrojan errores en el tiempo de compilación/evaluación cuando los puntos y coma están ausentes. No quise alentar la falta de puntos y comas en javascript. Si es cierto, todo lo contrario. –

+1

Es la palabra "oficial" lo que me molesta. Se tolera la omisión, pero los puntos y comas * son * parte de la sintaxis, oficialmente. –

1

La línea de comandos de javascript no se puede romper con saltos de línea. Pero los argumentos de las funciones se pueden romper, no son muy recomendables (hecho en su ejemplo).

Cuestiones relacionadas