2014-03-04 30 views
5

我花了很多時間在此Javascript問題一個公平的位(你能告訴我是一個JS小白):爲什麼{位置會影響這個Javascript代碼?

採取一些寫得很好的Javascript代碼透露出模塊模式的like this example

運行正常工作。然後將「{」移到下一行(作爲C#開發人員,我將所有環境設置爲將大括號放在新行上)並再次運行。

return 
    { 
    someMethod : myMethod, 
    someOtherMethod : myOtherMethod 
    }; 

它現在在「13行破解錯誤'返回'中收到了不少JS錯誤。」和Chrome Debugger中的「Uncaught SyntaxError:Unexpected token:」。

我的問題是,如何才能東西語法影響的Javascript這樣的嗎?

set it up here in JSFiddle(來得到它的工作,移動{後「迴歸」回到同一條線路)

回答

8

JavaScript最糟糕的特性之一是自動分號插入。

return; // a semicolon is implicitly inserted here 

這部分幾乎是有效的JavaScript,但並不完全,所以你得到一個語法錯誤:

{ 
    someMethod : myMethod, 
    someOtherMethod : myOtherMethod 
}; 

如果你曾試圖做到這一點:

return 
    [ 1, 2, 3, 
     4, 5, 6, 
     7, 8, 9 ]; 

它會剛剛返回undefined,那會很糟糕。 ASI很糟糕,但我們現在仍然堅持使用它,尤其是因爲無分號代碼已成爲一種時尚。

這是什麼呢?

return a 
    + b 
    + c; 

This?

return e 
    /f /g; 

好的,好吧,也許這個人有點做作,也許這不完全是主題。但ASI不好。我希望每個人都明白。

+0

謝謝,這是一個獨立的解釋 – Rodney

0

因爲回報預期值(或變量),當你把大括號在同一條線上,你告訴回報哈希,但如果你移動大括號的下一行,然後你告訴任何回報所以預計不會在下一行。

編輯 下一行預計不會在收益方面。

+0

一切,除了這個正確的:「所以下一行不是預期的「。下一行是預期的,但{foo:'bar'};'語句在語法上不正確 – zerkms

+0

編輯爲「更好地解釋下一行不是預期的」 – Aguardientico

+0

好的。 「因爲return需要一個值(或變量)」---'console.log()'也需要一個表達式,但是你可以把它分成多行。 「期待值」並不意味着它不能被放入另一行。 – zerkms

2

JavaScript並一些所謂Automatic semi-colon insertion我相信這是這是怎麼影響你的成績。基本上,它看到return語句沒有上線後,並認爲這是行並返回結束,結束的功能。

9

因爲ECMA standard section 12.9規定,你不能有return關鍵字和其表達之間的新線。

 
    ReturnStatement : 
     return ; 
     return [no LineTerminator here] Expression ; 
相關問題