6

Suppose I have this function:

const testFunction = () => {
  const item_one = 1
  const item_two = 2
  return { item_one, item_two }
}

When I'm destructuring the return value from this function like this

let item_one, item_two; // the variables are defined elsewhere

{ item_one, item_two } = testFunction() // <-- Syntax error: Unexpected token "="

I'm getting a syntax error.

Instead when I'm doing

1)

let { item_one, item_two } = testFunction() // not suitable since I need to reassign

or

2)

let item_one, item_two;
({ item_one, item_two } = testFunction())

the code executes as expected.

Could someone explain why do I need the parentheses around the assignment in 2. and why do I get a syntax error?

Thanks!

isherwood
  • 58,414
  • 16
  • 114
  • 157
Igor Moraru
  • 7,089
  • 1
  • 12
  • 24
  • 6
    Because otherwise `{` is starting a block: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block – jonrsharpe Aug 10 '21 at 13:00
  • Sort of the same as array destructuring using `[` - `Object.entries(x).forEach( [k,v] => ...)` doesnt work but `Object.entries(x).forEach( ([k,v]) => ...)` does – Jamiec Aug 10 '21 at 13:02
  • From the dupe/[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#object_destructuring): "_`{a, b} = {a: 1, b: 2}` is not valid stand-alone syntax, as the {a, b} on the left-hand side is considered a block and not an object literal_" – Nick Parsons Aug 10 '21 at 13:05

0 Answers0