[英]Destructuring giving parsing error
我試圖了解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文檔 :
使用不帶聲明的對象文字解構賦值時,賦值語句周圍的
( .. )
是必需的語法。
{a, b} = {a:1, b:2}
是無效的獨立語法,因為左側的{a, b}
被認為是一個塊,而不是對象文字。但是,
({a, b} = {a:1, b:2})
是有效的,var {a, b} = {a:1, b:2}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.