JavaScript中的Lambda函数语法,不带花括号

时间:2011-05-07 05:36:08

标签: javascript function lambda

我刚刚发现Firefox接受了以下(很棒的)语法

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

有谁知道这到底是怎么回事?这有什么标准吗?其他浏览器也接受吗? (我测试了IE 8,它给了我语法错误)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

我个人避免使用无支撑结构,因为当代码被不知道如何工作的人修改时,它会导致可维护性问题。