2015-12-13 1 views
6

同じスコープ内の2つの類似するオブジェクトから同じ変数を削除する明確な方法はありますか?ES2015同じスコープ内でオブジェクトを2度デストラクションする

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 
} 

答えて

8

割り当てをまとめてラップすると、括弧で区切って変数を再割り当てできます。これが必要な理由は、そうでなければ、{がパーサーによって、オブジェクトのリテラルまたは割り当てパターンではなくブロックを開始するとみなされるためです。 This blog postは状況をより詳細に説明します。

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

ここで '{...} 'はオブジェクトリテラルを示すものではありません。 –

+1

本当に、それは技術的にはObjectAssignmentPatternですが、主要な中括弧を持つステートメントの位置には何かが残っていて、ブロックステートメントではないという点が残っています:) – dfreeman

関連する問題