2012-06-28 20 views
10

no puedo recordar dónde, pero recientemente he pasado un comentario donde el usuario dijo que 1TBS es más preferida que Allman en JavaScript y dijo Allman tiene implicaciones peligrosas en JavaScript.consecuencias peligrosas de estilo Allman en JavaScript

¿Era una declaración válida? Si es así, ¿por qué?

+1

Hay más declaraciones afectadas por ASI, verifique la especificación. enlace que @Esailija publicó o echó un vistazo a [esta respuesta] (http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion/2846298#2846298), Resumí las reglas de ASI allí ... Ah, y solo por diversión, * intento * de pasar la siguiente prueba: [Prueba de ASI] (http://asi.qfox.nl/) – CMS

+0

Ver también [¿El estilo de bloque es realmente este? importante?] (http://stackoverflow.com/q/3004496/1048572) – Bergi

Respuesta

19

return no puede tener LineTerminator después de que manera:

return 
{ 


}; 

se trata como return; (volver undefined) en lugar de return {}; (devolver un objeto)

Ver las reglas para Automatic Semicolon Insertion (ASI) por más.

+0

¿Tal vez decir que está relacionado con ASI es una ventaja para la respuesta? –

+4

He crecido realmente como Javascript, pero esto sigue siendo muy raro – NimChimpsky

+0

@FlorianMargaine Dame un momento – Esailija

2

Creo que depende de la afirmación. Por ejemplo, una declaración de devolución podría romperse si la llave de apertura está en una nueva línea. More info here.

2
return { 
    a: "A", 
    b: "B" 
}; 

// vs. 

return // Semicolon automatically inserted here! Uh oh! 
{ 
    a: "A", 
    b: "B" 
} 
+0

obtenerlo. ¡¡¡Gracias!!! –

3

Es una declaración válida.

Debido a que los motores de JavaScript tienen lo que se llama ASI (Punto y coma automática de inserción) que inserta un punto y coma si es necesario en las líneas de devoluciones. El "si es necesario" es ambiguo; a veces funciona y otras no. Ver the rules.

Por lo tanto, como se ha dicho en las otras respuestas:

return 
{ 
}; 

// Is read by the JavaScript engine, after ASI, as: 
return; // returns undefined 
{ // so this is not even executed 
}; 

así que no es recomendable para return declaraciones.

Sin embargo, si sus directrices recomiendan el estilo Allman para las declaraciones de función, que está perfectamente bien. Sé que algunos sí.

Cuestiones relacionadas