Lambda function syntax in JavaScript without curly braces

后端 未结 2 594
梦谈多话
梦谈多话 2020-12-03 22:08

I just found out that the following (awesome) syntax is accepted by Firefox

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

Does anyone know what the

相关标签:
2条回答
  • 2020-12-03 22:29

    This isn't part of a standard. The documentation is at https://developer.mozilla.org/en/New_in_JavaScript_1.8#Expression_closures_%28Merge_into_own_page.2fsection%29

    There's discussion about adding some syntax along these lines or even shorter to the standard. See http://wiki.ecmascript.org/doku.php?id=strawman:shorter_function_syntax

    0 讨论(0)
  • 2020-12-03 22:34

    The braces are being omitted, just as you can for other control structures that take a block (if,for). It's part of standard syntax for those, perhaps not for functions. One could check the spec I guess.

    The convention is that if braces are omitted, the block is the following single statement (only one statement).

    For example

    if(x) g=1;
    

    is equivalent to

    if(x){ g=1; }
    

    However, note that

    if(x) g=1; f=2;
    

    is NOT equivalent to

    if(x){ g=1; f=2; }
    

    it is actually

    if(x){ g=1; } f=2;
    

    I avoid the braceless construct, personally, since it can lead to maintainability problems when the code is modified by people who don't know how this works.

    0 讨论(0)
提交回复
热议问题