Bergi wrote:
Jacob Parker schrieb:
Either I'm wrong, or that's missing some parens. Assume the following (the
only interpretation I can see to not throw a syntax error),

     var y = (function (a) a ? f : x++)(1);

In which case, that could only return `f`, which when printed should print
the source of f, no?

Uh, I had some problems with that either, but finally got it now. If we make the parens explicit, the point is that the expression should be evaluated as

  var y = ((function (a) a) ? f : x++)(1); // === f(1)

instead of

  var y = (function (a) (a ? f : x++))(1); // === f

That's right.

Admittedly, I think arrow functions have same problem. How is

  var y = (a) => a ? f : x++ (1);

evaluated (or is it syntactically valid at all)?

The problem with expression closures is precedence inversion: you have LowPrec ~~> HighPrec ~~> stuff ending with LowPrec. The particular nonterminals are AssignmentExpression and PrimaryExpression.

No such problem afflicts arrows, because they are low-precedence, in fact AssignmentExpression alternative right-hand sides. So your example here is a syntax error, because you are placing two assignment expressions next to one another with no operator or semicolon in between.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to