2014-12-09 10 views
22

Perché la destrutturazione di oggetti genera un errore se non esiste una parola chiave var davanti ad essa?destrutturazione di oggetti senza var

{a, b} = {a: 1, b: 2}; 

tiri SyntaxError: expected expression, got '='

I seguenti tre esempi funzionano senza problemi questione

var {a, b} = {a: 1, b: 2}; 
var [c, d] = [1, 2]; 
    [e, f] = [1, 2]; 

Bonus: Perché non bisogno di un var per array di destrutturazione?

mi sono imbattuto nel problema facendo qualcosa di simile

function() { 
    var {a, b} = objectReturningFunction(); 

    // Now a and b are local variables in the function, right? 
    // So why can't I assign values to them? 

    {a, b} = objectReturningFunction(); 
} 

risposta

31

Il problema nasce dalle {...} operatori che hanno molteplici significati in JavaScript.

Quando { appare all'inizio di un Dichiarazione, sarà sempre rappresentano un block, che non può essere assegnato. Se appare in seguito nell'istruzione come espressione , rappresenterà un oggetto.

Il var contribuisce a rendere questa distinzione, poiché non può essere seguita da una dichiarazione , così come grouping parenthesis:

({a, b} = objectReturningFunction()); 
-2

Riferimento MDN da:

Redeclaring la stessa variabile all'interno della stessa la funzione o l'ambito del blocco genera un errore SyntaxError.

if (x) { 
    let foo; 
    let foo; // SyntaxError thrown. 
} 

Temporal dead zone and errors with let

+0

Si dovrebbe almeno aggiungere una nota dicendo che la domanda è sbagliata. – Taurus

Problemi correlati