Javascript 解析错误

Javascript 解析错误,javascript,ecmascript-6,Javascript,Ecmascript 6,我试图理解ES2015(ECMAScript 6)中的解构 我需要一个函数来处理一些变量并重新分配新变量 在下面的示例中,我创建了一个初始化foo和bar的函数,以及另一个更改foo和bar的函数 然后,我创建了三个使用foo和bar的函数。其中两个有效,一个无效。我似乎不明白为什么 请分享任何见解以帮助我理解 谢谢 函数初始化fobar(){ 设foo=1, bar=2; 返回{foo,bar}; } 函数changeFooBar(f,b){ 设foo=f*2, bar=b*2; 返回{fo

我试图理解ES2015(ECMAScript 6)中的解构

我需要一个函数来处理一些变量并重新分配新变量

在下面的示例中,我创建了一个初始化foo和bar的函数,以及另一个更改foo和bar的函数

然后,我创建了三个使用foo和bar的函数。其中两个有效,一个无效。我似乎不明白为什么

请分享任何见解以帮助我理解

谢谢

函数初始化fobar(){
设foo=1,
bar=2;
返回{foo,bar};
}
函数changeFooBar(f,b){
设foo=f*2,
bar=b*2;
返回{foo,bar};
}
函数fooBarWorks(){
设{foo,bar}=initializefobar();
console.log(foo+bar);//3
}
函数fooBarAlsoWorks(){
设f=1,
b=2,
{foo,bar}=changeFooBar(f,b);
console.log(foo+bar);//6
}
函数foobardoesnetwork(){
设{foo,bar}=initializefobar();
{foo,bar}=changeFooBar(foo,bar);//导致解析错误
console.log(foo+bar);
}
fooBarWorks();//将3写入控制台
fooBarAlsoWorks();//将6写入控制台
foobardoesnetwork();//由于“分析错误意外tolken=“
您需要更改:

{foo, bar} = changeFooBar(foo, bar);
致:

因为在这种情况下,
{
被解释为代码块的打开

()
包围赋值可以消除
{
的歧义

根据:

当使用不带声明的对象文字解构赋值时,赋值语句周围的
(..)
是必需的语法

{a,b}={a:1,b:2}
不是有效的独立语法,因为 左侧被视为块,而不是对象文字

但是,
({a,b}={a:1,b:2})
是有效的,正如
var{a,b}={a:1,b:2}


语句开头的
{
被解析为块,而不是对象构造函数。谢谢Jaromanda X和@fayazmiraz。这非常有用。除了需要使用[]而不是{}之外,还有其他原因吗?我注意到MDN文档中提到了这两个。
({foo, bar} = changeFooBar(foo, bar));