2011-04-24 42 views
5

至少在V8像爲什麼JavaScript中的if()表達式中存在var是非法的?

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

會給大約一個意想不到的「變種」關鍵字錯誤。然而,如果var在if()之前發生,那麼沒有錯誤,但是我仍然在表達式中保留了i的賦值。爲什麼有這麼奇怪的例外?這是否在ECMA腳本標準中?在if()表達式的評估中是否存在不可檢測的閉包,因此在var中留下會使我的任務消失?

爲了進一步概括,看起來var在它之前必須沒有非空白字符。

+5

這似乎是因爲'var'是ECMA-262標準中的一個關鍵字,用於標識一個變量語句,它是一個語句而不是一個表達式。 – 2011-04-24 06:27:43

回答

10

您的問題的簡短答案是,您不能使用變量語句作爲表達式來評估if。

更詳細的回答是,根據ECMA-262 S12.5,if語句具有以下形式:

if (Expression) Statement else Statement 

ECMA-262 S11描述了一種表達爲:

PrimaryExpression : 
    this 
    Identifier 
    Literal 
    ArrayLiteral 
    ObjectLiteral 
    (Expression) 

的以var開頭的表達式是VariableStatment(ECMA-262 s12.2),它不是上述之一。

相關問題