Inconsistent evaluation order in destructuring assignments

Allen Wirfs-Brock allen at
Fri Oct 18 13:10:50 PDT 2013

On Oct 18, 2013, at 12:24 PM, BelleveInvis wrote:

> ...this causes an inconsistency that in expression `[f().x] = [g()]`, g is called BEFORE f. That is weird, and differ from `f().x = g()` where g is called after f.

but consider
   [f().x, h().y] = g();  //assume g() evaluates to an array-like object (and intentionally removed the RHS array literal)
even if evaluation of the RHS was delayed until after evaluating the first LHS element, g() would still be evaluated before h().  You might consider  evaluating all of the LHS elements to References before evaluating the RHS.  That could require accumulating an arbitrary large number of pending References and it wouldn't work for object destructurings.  For example:

{x:  f().x=_=>{throw "no x"}(),  h().y} = getPoint();


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list