title: Can I pre-declare variables for destructuring assignment of objects?
body: <p><strong>Background</strong></p>
  
  <p>When I tried destructuring assignment with arrays I was able to pre-declare my variables:</p>
  
  <pre><code>let a, b, c;
  let arr = [1, 2, 3, 4, 5];
  [a, b, c] = arr;
  
  console.log(a) // logs 1
  console.log(b) // logs 2
  console.log(c) // logs 3
  </code></pre>
  
  <p>This went through the Babel compiler just fine.</p>
  
  <p>However when I tried to do the same with objects I got an error</p>
  
  <pre><code>let a, b, c
  let obj = {cat: 'meow', dog: 'woof', mouse: 'squeak'};
  {cat: a, dog: b, mouse: c} = obj;
  
  console.log(a) // I want this to log 'meow'
  console.log(b) // I want this to log 'woof'
  console.log(c) // I want this to log 'squeak'
  </code></pre>
  
  <p><strong>Question</strong></p>
  
  <p>Is this an ES6 or Babel quirk/problem? If it's intentional for ES6, why the difference from the way arrays are treated?</p>
  
  <p><strong>Note</strong></p>
  
  <p>I understand that replacing <code>var</code> with <code>let</code> means I'm not required to pre-declare my variables and that having the <code>let</code> inline is valid (and, I believe, generally prefered). I'd like to know about the difference between implementations rather than a "don't do it like that at all" answer.</p>