Inconsistent evaluation order in destructuring assignments

Brendan Eich brendan at mozilla.com
Fri Oct 18 12:50:36 PDT 2013


Yes, this is intentional and goes all the way back to ES4's original
destructuring proposal, based on array-pattern destructuring implemented
in Opera's Futhark engine. See

http://wiki.ecmascript.org/doku.php?id=discussion:destructuring_assignment#contrast_to_normal_assignment

We want destructuring to be simple: to desugar from let {x, y} = pt; to
let x = pt.x, y = pt.y (but with pt evaluated once only, of course).

/be

> BelleveInvis <mailto:be5invis at outlook.com>
> October 18, 2013 12:24 PM
> In ES5 all assignments are evaluated following this formula:
>
>  1. get a reference via evaluating LHS
>  2. get a value through evaluating RHS
>  3. assign the value to the reference
>
>
> However in the current draft, destructuring assignment are evaluated
> in another order which is (as seen in section 12.13.3)
>
>  1. get a value via evaluating RHS
>  2. parse LHS pattern
>  3. bring parts of RHS into the LHS subpatterns
>
>
> 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.
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss


More information about the es-discuss mailing list