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:be5in...@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@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss