Expression closures - use-cases for shortcut lambda syntax(blocks)

Brendan Eich brendan at
Mon Mar 19 15:36:48 PDT 2007

On Mar 19, 2007, at 2:55 PM, Jon Zeppieri wrote:

> On 3/19/07, P T Withington <ptw at> wrote:
>> On 2007-03-19, at 17:35 EDT, Jeff Dyer wrote:
>>>      let (x=y) x
>>> become
>>>      let (x=y) => x
>> I thought it became:
>> (x) => x (y)
> ...which brings up the issue of associativity.  When I first looked at
> your example, I thought x was being applied to y, rather than (x) => x
> being applied to y.

Forgot to answer the associativity question. With ES3 function  
expressions, which are primary expressions, you need not parenthesize  
the function expression to call it. Just append (actuals) to invoke:

js> 1 + function(){return 2}()

Note the 1 + or some other left-expression-context is necessary.  
Oherwise, with just:

js> function(){return 2}
function () {
     return 2;

you have written a useless unnamed function expression statement that  
ends at the } that closes the body, and any () after will provoke a  
syntax error:

js> function(){return 2}()
typein:4: SyntaxError: syntax error:
typein:4: function(){return 2}()
typein:4: .....................^

This is due to

12.4 Expression Statement
ExpressionStatement :
[lookahead ∉ {{,function}] Expression ;

in ECMA-262 Edition 3.

Without the "clutter" => connecting the (formals) and assign-expr  
body, we are free to match the ES3 behavior and not require  
parentheses around the function expression in order to apply it.

So => could be considered an operator with high precedence, but then  
almost all expression bodies would have to be parenthesized. If it is  
low precedence, then you will need to parenthesize ((x) => x)(y). I  
think Yuh-Ruey Chen already proposed that => be low precedence, but  
higher than the comma operator, in an earlier post.

This seems to me another advantage of => -- that it facilitates  
operator precedence parsing of expression closures.

-------------- next part --------------
An HTML attachment was scrubbed...

More information about the Es4-discuss mailing list