对象解构没有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. }
暂时死亡区域和错误与让步