对象解构没有var

为什么如果在它前面没有var关键字,对象解构会抛出一个错误?

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

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

这个问题源于JavaScript中具有多种含义的{...}运算符。

{出现在语句开始时,它总是表示一个块 ,不能被分配给。 如果它在expression式的后面出现,那么它将代表一个对象。

var有助于做出区分,因为它不能跟随一个Statement ,就像分组括号一样 :

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

MDN引用:

在相同的函数或块范围内重新声明相同的variables会引发一个SyntaxError。

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

暂时死亡区域和错误与让步