2011-04-24 11 views
5

Por lo menos en algo así como V8¿Por qué es ilegal tener var dentro de una expresión if() en javascript?

if((var i = x*x) == 2){} 

dará un error acerca de una palabra clave inesperada 'var'. Sin embargo, no hay ningún error si la var ocurre antes de if() pero aún dejo la asignación de i en la expresión. ¿Por qué una excepción tan extraña? ¿Está esto en el estándar de script de ECMA en alguna parte? ¿Hay un cierre indetectable ocurriendo dentro de la evaluación de la expresión if() por lo que dejar en la var haría desaparecer mi asignación?

Para generalizar más, parece que var no debe tener caracteres de espacios en blanco que lo preceden.

+5

Esto parece deberse a que 'var' es una palabra clave en el estándar ECMA-262 que se utiliza para identificar un VariableStatement, que es una declaración y no una expresión. –

Respuesta

10

La respuesta breve a su pregunta es que no puede usar una declaración de variable como la expresión para evaluar en un if.

una respuesta más detallada es que según ECMA-262 S12.5, una sentencia if tiene la forma:

if (Expression) Statement else Statement 

ECMA-262 s11 describe una expresión como:

PrimaryExpression : 
    this 
    Identifier 
    Literal 
    ArrayLiteral 
    ObjectLiteral 
    (Expression) 

Un expresión que comienza con var es un VariableStatment (ECMA-262 s12.2), que no es uno de los anteriores.

Cuestiones relacionadas