2014-12-09 2 views
22

Почему разрушение объекта вызывает ошибку, если перед ним нет ключевого слова var?разрушение объекта без var

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

бросает SyntaxError: expected expression, got '='

Следующие три примера работают без проблем

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

бонусный вопрос: Почему бы нам не нужен var для массива деструктуризации?

я столкнулся с проблемой делать что-то вроде

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(); 
} 

ответ

31

Вопрос вытекающей из {...} операторов, имеющих несколько значений в JavaScript.

Когда { появляется в начале Заявления, он будет всегда представлять block, который не может быть назначен. Если он появится позже в заявлении как Выражение, то оно будет представлять объект.

var помогает сделать это различие, так как оно не может сопровождаться Заявление, как будет grouping parenthesis:

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

Ссылка от MDN:

повторного объявления той же переменной в пределах одного функции или блока увеличивает значение SyntaxError.

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

Temporal dead zone and errors with let

+0

Вы должны, по крайней мере, добавить примечание о том, что вопрос неверен. – Taurus

Смежные вопросы