Me sorprendió mucho el siguiente comportamiento.
f1 = (x) => { return /* Comment on x. */ x } f2 = (x) => { return /* Comment on x. */ x } console.log(f1(1)) // => 1 console.log(f2(2)) // => undefinedEsto se debe claramente a que f2 se analiza con la inserción automática de punto y coma como
f2 = (x) => { return; x; };y, de hecho, Firefox señala que hay código muerto después de la devolución.
¿Es esto realmente lo que se entiende por inserción automática de punto y coma? ¿Es esto un problema de implementación o un problema de idioma?
EDITAR: alguien parece creer que mi pregunta es la misma que ¿Por qué el valor devuelto debe estar en la misma línea que la declaración de devolución en JavaScript? . Bueno, lo siento, no lo es. He puesto un comentario que abarca varias líneas. Y en las técnicas habituales de análisis, los comentarios se comportan como si no existieran , por lo que f2 debería ser equivalente a
f2 = (x) => { return x }Mi pregunta es si esto es un defecto en la implementación o si este manejo de comentarios es conforme al estándar. ¿Por qué el comentario de varias líneas se trata como un salto de línea en lugar de ignorarlo?
Esto es lo esperado, está funcionando según lo diseñado. La especificación ES6 dice lo siguiente sobre la gramática de los comentarios :
Los comentarios se comportan como espacios en blanco y se descartan excepto que, si un MultiLineComment contiene un punto de código de terminador de línea, entonces el comentario completo se considera un LineTerminator a efectos de análisis sintáctico por parte de la gramática sintáctica.
Y este LineTerminator hace que se active la inserción automática de punto y coma, siguiendo las reglas habituales.