2011-05-07 77 views
9

我剛剛發現以下(真棒)語法由火狐lambda函數語法,而不花括號

f = function(x) x+1; 
f(17) //gives 18 

接受有誰知道這到底是怎麼回事?這是在任何標準?其他瀏覽器是否也接受它? (我測試了IE 8,它給了我語法錯誤)

回答

10

這不是標準的一部分。文檔位於https://developer.mozilla.org/en/New_in_JavaScript_1.8#Expression_closures_%28Merge_into_own_page.2fsection%29

有關於在這些行中添加某些語法的討論,或者甚至更短的標準。見http://wiki.ecmascript.org/doku.php?id=strawman:shorter_function_syntax

+0

表達式關閉文檔鏈接已更改爲新的[one](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Expression_Closures)。 – 2017-03-27 11:01:54

1

大括號被省略,就像你可以爲其他控制結構使用塊(iffor)一樣。它是這些標準語法的一部分,可能不適用於函數。我可以檢查規格。

的慣例是,如果省略牙套,該塊是以下單個語句(一個語句)。

例如

if(x) g=1; 

相當於

if(x){ g=1; } 

但是請注意,

if(x) g=1; f=2; 

並不等同於

if(x){ g=1; f=2; } 

它實際上是

if(x){ g=1; } f=2; 

我避免braceless結構,個人,因爲當代碼是由人誰不知道這是如何工作修改它會導致可維護性的問題。

+5

不只是大括號。 return語句也被忽略! – hugomg 2011-05-07 13:50:38

+0

@missingno我在@ Boris的鏈接上也看到了這一點。這是一個非常方便的速記功能! – Cole 2011-05-07 18:23:54