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

Posted

技术标签:

【中文标题】没有花括号的 JavaScript 中的 Lambda 函数语法【英文标题】:Lambda function syntax in JavaScript without curly braces 【发布时间】:2011-08-20 15:11:38 【问题描述】:

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

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

有人知道这里到底发生了什么吗?这有什么标准吗?其他浏览器也接受吗? (我测试了 IE 8,它给了我语法错误)

【问题讨论】:

【参考方案1】:

这不是标准的一部分。文档位于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

【讨论】:

表达式闭包文档链接已更改为新的one。【参考方案2】:

大括号被省略了,就像其他需要一个块的控制结构一样 (if,for)。它是那些标准语法的一部分,也许不是函数的一部分。可以检查一下我猜的规格。

约定是如果省略大括号,则块是下面的单个语句(只有一个语句)。

例如

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;

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

【讨论】:

不仅仅是牙套。 return 语句也被省略了! @missingno 我在@Boris 的链接上也看到了。这是一个非常方便的函数简写!

以上是关于没有花括号的 JavaScript 中的 Lambda 函数语法的主要内容,如果未能解决你的问题,请参考以下文章

浅析 Bash 中的 {花括号} | Linux 中国

如何在刀片花括号中使用 javascript 变量

在 laravel 刀片花括号内连接 Javascript 变量

JavaScript里的try..catch和if...else有何区别啊

C程序花括号嵌套层次统计(新)

反人类的MyEclipse之-调整JavaScript代码-花括号换行显示