Saltar al contenido

Inserción automática de punto y coma y declaraciones de devolución

Hola usuario de nuestro sitio web, encontramos la respuesta a tu interrogante, has scroll y la encontrarás más abajo.

Solución:

El intérprete / compilador de javascript es tan inteligente que solo inserta puntos y comas automáticos si luego hay un Javascript válido.

Tu código funciona, porque && b tal como está no es una expresión válida, por eso no se inserta ningún punto y coma después de la return a Resultando en:

return a && b && c;

Sin embargo:

return (undefined);//implicitely inserted

    ....

es perfectamente válido y por eso se inserta un punto y coma.

Para completar la referencia a la especificación: inserción automática de punto y coma. Vale la pena leer los ejemplos.

No es específico del navegador / implementación, pero Section 7.9 Automatic Semicolon Insertion de la Especificación del lenguaje ECMAScript vale la pena leer.

7.9 Inserción automática de punto y coma

Ciertas declaraciones de ECMAScript (declaración vacía, declaración de variable, declaración de expresión, declaración do-while, declaración de continuación, declaración de interrupción, declaración de retorno y declaración de lanzamiento) deben terminarse con punto y coma. Estos puntos y comas siempre pueden aparecer explícitamente en el texto fuente. Sin embargo, por conveniencia, estos puntos y comas se pueden omitir del texto de origen en determinadas situaciones. Estas situaciones se describen diciendo que los puntos y comas se insertan automáticamente en el flujo de tokens de código fuente en esas situaciones.

7.9.1 Reglas de inserción automática de punto y coma Hay tres reglas básicas para la inserción de punto y coma:

  1. Cuando, a medida que se analiza el programa de izquierda a derecha, se encuentra un token (llamado token infractor) que no está permitido por ninguna producción de la gramática, se inserta automáticamente un punto y coma antes del token infractor si uno o más de los siguientes las condiciones son true:

    • El token infractor está separado del token anterior por al menos un LineTerminator.
    • El token infractor es}.
  2. Cuando, a medida que el programa se analiza de izquierda a derecha, se encuentra el final del flujo de entrada de tokens y el analizador no puede analizar el flujo de token de entrada como un único Programa ECMAScript completo, se inserta automáticamente un punto y coma al final de el flujo de entrada.

  3. Cuando, a medida que el programa se analiza de izquierda a derecha, se encuentra un token que está permitido por alguna producción de la gramática, pero la producción es una producción restringida y el token sería el primer token para un terminal o no terminal inmediatamente después de la anotación. ?[no LineTerminator here]? dentro de la producción restringida (y, por lo tanto, dicho token se denomina token restringido), y el token restringido está separado del token anterior por al menos un LineTerminator, luego se inserta automáticamente un punto y coma antes del token restringido. Sin embargo, existe una condición primordial adicional en las reglas anteriores: un punto y coma nunca se inserta automáticamente si el punto y coma se analizaría como una declaración vacía o si ese punto y coma se convertiría en uno de los dos puntos y comas en el encabezado de una declaración for (ver 12.6.3). NOTA Las siguientes son las únicas producciones restringidas en la gramática: PostfixExpression: LeftHandSideExpression [no LineTerminator here] ++ LeftHandSideExpression [no LineTerminator here] – ContinueStatement: continuar [no LineTerminator here] Identificador; BreakStatement: romper [no LineTerminator here] Identificador; ReturnStatement: retorno [no LineTerminator here] Expresión ; ThrowStatement: lanzar [no LineTerminator here] Expresión ; El efecto práctico de estas producciones restringidas es el siguiente: cuando se encuentra un token ++ o – donde el analizador lo trataría como un operador postfijo, y al menos un LineTerminator ocurrió entre el token anterior y el token ++ o – , luego se inserta automáticamente un punto y coma antes del símbolo ++ o -. Cuando se encuentra un token de continuar, romper, regresar o lanzar y se encuentra un LineTerminator antes del siguiente token, se inserta automáticamente un punto y coma después del token de continuar, romper, regresar o lanzar. El consejo práctico resultante para los programadores de ECMAScript es: Un operador posfijo ++ o – debe aparecer en la misma línea que su operando. Una expresión en una declaración return o throw debe comenzar en la misma línea que el token return o throw. Un identificador en una instrucción break o continue debe estar en la misma línea que el token break o continue.

7.9.2 Ejemplos de inserción automática de punto y coma

La fuente

 1 2  3

no es una oración válida en la gramática de ECMAScript, incluso con las reglas de inserción automática de punto y coma. En contraste, la fuente

 1
2  3

tampoco es una oración ECMAScript válida, pero se transforma mediante la inserción automática de punto y coma en lo siguiente:

 1
;2 ; 3;

que es una sentencia ECMAScript válida. La fuente

for (a; b
)

no es una oración ECMAScript válida y no se modifica mediante la inserción automática de punto y coma porque el punto y coma es necesario para el encabezado de una instrucción for. La inserción automática de punto y coma nunca inserta uno de los dos puntos y coma en el encabezado de una instrucción for. La fuente

return
a + b

se transforma mediante la inserción automática de punto y coma en lo siguiente:

return;
a + b;

NOTA La expresión a + b no se trata como un valor que debe devolver la declaración de retorno, porque un LineTerminator lo separa del retorno del token. La fuente

a = b
++c

se transforma mediante la inserción automática de punto y coma en lo siguiente:

a = b;
++c;

NOTA El token ++ no se trata como un operador de sufijo que se aplica a la variable b, porque se produce un LineTerminator entre by ++. La fuente

if (a > b)
else c = d

no es una oración ECMAScript válida y no se altera mediante la inserción automática de punto y coma antes del token else, aunque no se aplica ninguna producción de la gramática en ese punto, porque un punto y coma insertado automáticamente se analizaría como una declaración vacía. La fuente

a = b + c
(d + e).print()

no se transforma mediante la inserción automática de punto y coma, porque la expresión entre paréntesis que comienza la segunda línea se puede interpretar como una lista de argumentos para una llamada de función:

a = b + c(d + e).print()

En el caso de que una instrucción de asignación deba comenzar con un paréntesis izquierdo, es una buena idea que el programador proporcione un punto y coma explícito al final de la instrucción anterior en lugar de depender de la inserción automática de punto y coma.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *