Ecmascript 6 ES2015在同一范围内两次分解对象

Ecmascript 6 ES2015在同一范围内两次分解对象,ecmascript-6,ecmascript-harmony,Ecmascript 6,Ecmascript Harmony,是否有一种干净的方法可以从同一范围内的两个类似对象中解构相同的变量 function(oldState, newState) { let {foo, bar} = oldState; // do stuff // let {foo, bar} = newState; // illegal double declaration in same scope {foo, bar} = newState; // illegal, not sure why let {foo: foo1

是否有一种干净的方法可以从同一范围内的两个类似对象中解构相同的变量

function(oldState, newState) {
  let {foo, bar} = oldState;
  // do stuff //
  let {foo, bar} = newState; // illegal double declaration in same scope
  {foo, bar} = newState; // illegal, not sure why
  let {foo: foo1, bar: bar1} = newState; // legal but ugly
  foo = newState.foo; // legal, but requires multiple lines
}

您可以将赋值包装在parens中,通过解构重新赋值变量。之所以需要这样做,是因为解析器假定
{
开始于一个块,而不是一个对象文本或赋值模式。详细解释了这种情况

function(oldState, newState) {
  let {foo, bar} = oldState;
  // do stuff //
  ({foo, bar} = newState);
}

并不是说这里的
{…}
也不表示对象文字。诚然,从技术上讲,它是一个
ObjectAssignmentPattern
,但关键是,如果语句位置中有前导卷曲且不是块语句,那么您将很难处理:)