es6将一个已经声明的变量用于解构赋值

let x;
{x} = {x: 1};
// SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

没看懂上边这句话什么意思,为什么{x}理解成一个代码块会发生语法错误,为什么不提前声明变量就不会报错

阅读 6.1k
2 个回答

这是解构赋值:

let {x} = {x: 1};

而下边这个:

let x;
{x} = {x: 1}; //你前边已经声明过x了,这时{x}会被解释成代码块,而代码块没法赋值……

或者你也可以这么来理解:
=是赋值运算符,它是从右向左结合的(注意区别于数学概念上的等号,js里的=实际上可以理解为<=,比如语句x = a + 3;就是a+3后赋值给x),它需要左边的运算数是一个变量、数组的一个元素或者是对象的一个属性,右边的就无所谓。那么你在左边放了一个代码块,这显然不太合适……

用括号包起来

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题