Expression Closures as Compliment to Arrow Functions

Brendan Eich brendan at mozilla.org
Mon Mar 23 15:37:28 UTC 2015


Allen Wirfs-Brock wrote:
>> including these, in addition to the existing shorthand syntaxes, 
>> should make the following examples work.
>>
>>     var x = { value: 3, toString() 'string', valueOf() this.value };
>>
>>     class x { constructor { this.value = 3; } valueOf() this.value }
>
> what you show above would be an expression bodied "concise method" 
> http://people.mozilla.org/~jorendorff/es6-draft.html#sec-method-definitions 
> <http://people.mozilla.org/%7Ejorendorff/es6-draft.html#sec-method-definitions> That’s 
> a different beast from a FF “expression closure”.
>
> These were consider but not adopted for ES6.  Primarily because they 
> introduced grammar, ASI and/or other issues that at the time didn’t 
> see worth trying to solve.

To be precise, the full `function (args) expr` form inverts precedence, 
creating fatal ambiguity. Here's an example from the old thread on an 
equvalent problem that afflicted ES4's let expressions:

function f() {return "f"}
var x = 3;
var y = function (a) a ? f : x++(1);
print(y);

This should print "f" but it instead prints function f converted to a 
string.

Expression closures are dead, IMHO. Even though the variant in object 
literals could be supported.

/be


More information about the es-discuss mailing list