解构给出解析错误

挂网

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

我希望函数对某些变量起作用,然后将新变量重新分配回去。

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

然后,我创建了三个使用foo和bar的函数。其中两个工作,一个没有。我似乎无法弄清楚为什么。

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

谢谢!

function initializeFooBar() {
  let foo = 1,
      bar = 2;
  return {foo, bar};
}
function changeFooBar(f, b) {
  let foo = f*2,
      bar = b*2;
  return {foo, bar};
}
function fooBarWorks() {
  let {foo, bar} = initializeFooBar();
  console.log(foo + bar); // 3
}
function fooBarAlsoWorks() {
  let f = 1,
      b = 2,
      {foo, bar} = changeFooBar(f, b);
  console.log(foo + bar); // 6
}
function fooBarDoesntWork() {
  let {foo, bar} = initializeFooBar();
  {foo, bar} = changeFooBar(foo, bar);  // causes parsing error
  console.log(foo + bar);
}
fooBarWorks(); // writes 3 to console
fooBarAlsoWorks(); // writes 6 to console
fooBarDoesntWork(); // doesn't run due to "parsing error unexpected tolken ="

杰罗曼达X

您需要更改:

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

至:

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

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

围绕作业()消除歧义{

根据MDN文档

( .. )当使用不带声明的对象文字解构分配时around分配语句是必需的语法。

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

但是({a, b} = {a:1, b:2}),按原样是有效的var {a, b} = {a:1, b:2}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章