Brendan Eich (2013-09-17T14:27:16.000Z)
> Nathan Wall <mailto:nathan.wall at live.com>
> September 17, 2013 10:06 AM
> I'm wondering what the best syntax is for object destructuring outside 
> of a var declaration.  For instance, the following works in Firefox 
> Nightly and Traceur:
>
>     var { a, b } = foo;
>
> but the following doesn't:
>
>     var a, b;
>     { a, b } = foo;
>
> I presume this is because in the second case the { a, b } is a block.
>
> However, the following does work:
>
>     var a, b;
>     ({ a, b }) = foo;
>
> Is the above what people are expected to use (when they need to use 
> destructuring outside of a var/let declaration or function arguments), 
> or is there another form available?

That's it. Lars Hansen originated destructuring for ES4 and implemented 
array patterns in Futhark (Opera's engine of the time), but not object 
patterns. His first proposal used

&{a: x, b: y} = foo

for just the reason you cite, but no one was keen on the ASI hazard 
(previous line must end with a semicolon). We cut the & pretty soon in 
ES4's evolution.

I say use var/let/const, it's better style; or else suffer a parentheses 
tax. This is pretty much a non-issue in practice, AFAICT.

/be
domenic at domenicdenicola.com (2013-09-25T02:38:34.173Z)
Nathan Wall <mailto:nathan.wall at live.com> September 17, 2013 10:06 AM

> Is the above what people are expected to use (when they need to use 
> destructuring outside of a var/let declaration or function arguments), 
> or is there another form available?

That's it. Lars Hansen originated destructuring for ES4 and implemented 
array patterns in Futhark (Opera's engine of the time), but not object 
patterns. His first proposal used

    &{a: x, b: y} = foo

for just the reason you cite, but no one was keen on the ASI hazard 
(previous line must end with a semicolon). We cut the & pretty soon in 
ES4's evolution.

I say use var/let/const, it's better style; or else suffer a parentheses 
tax. This is pretty much a non-issue in practice, AFAICT.