JavaScript中没有花括号的Lambda函数语法

10

我刚刚发现Firefox接受以下(非常棒的)语法:

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

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

2个回答

11

表达式闭包文档链接已更改为新的链接[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Expression_Closures]。 - Andriy Simonov

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;

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


6
不仅仅是括号,return语句也被省略了! - hugomg
@missingno 我也在 @Boris 的链接中看到了。这是一个非常方便的函数简写! - Cole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接