我试图了解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 ="
您需要更改:
{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] 删除。
我来说两句