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

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

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

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

【问题讨论】:

    标签: javascript function lambda


    【解决方案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 的链接上也看到了。这是一个非常方便的函数简写!
    猜你喜欢
    • 2020-11-13
    • 2013-08-10
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2017-05-22
    相关资源
    最近更新 更多