2011-05-07 14 views
9

Me acabo de enterar que la siguiente sintaxis (impresionante) es aceptada por Firefoxsintaxis de la función Lambda en JavaScript sin llaves

f = function(x) x+1; 
f(17) //gives 18 

¿Alguien sabe qué demonios está pasando aquí? ¿Esto es en cualquier estándar? ¿Otros navegadores también lo aceptan? (Probé IE 8 y me dio error de sintaxis)

Respuesta

10

Esto no es parte de un estándar. La documentación está en https://developer.mozilla.org/en/New_in_JavaScript_1.8#Expression_closures_%28Merge_into_own_page.2fsection%29

Se ha debatido sobre cómo agregar algo de sintaxis a lo largo de estas líneas o incluso más corto al estándar. Ver http://wiki.ecmascript.org/doku.php?id=strawman:shorter_function_syntax

+0

El enlace de documentación de cierres de expresiones ha cambiado a uno nuevo [uno] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Expression_Closures). –

1

Las llaves se están omitiendo, al igual que para otras estructuras de control que toman un bloque (if, for). Es parte de la sintaxis estándar para aquellos, tal vez no para las funciones. Uno podría verificar la especificación, supongo.

La convención es que si se omiten las llaves, el bloque es la siguiente instrucción única (solo una declaración).

Por ejemplo

if(x) g=1; 

es equivalente a

if(x){ g=1; } 

Sin embargo, tenga en cuenta que

if(x) g=1; f=2; 

no es equivalente a

if(x){ g=1; f=2; } 

en realidad es

if(x){ g=1; } f=2; 

evitar que el constructo braceless, en lo personal, ya que puede conducir a problemas de capacidad de mantenimiento cuando el código es modificado por las personas que no saben cómo funciona esto.

+5

No solo los tirantes. ¡La declaración de devolución también se omite! – hugomg

+0

@missingno Vi eso también en el enlace de @ Boris. ¡Es una taquigrafía bastante útil para las funciones! – Cole

Cuestiones relacionadas