没有花括号的 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 函数语法的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 刀片花括号内连接 Javascript 变量