2016-04-23 61 views
3

我有一個函數接受回調與對象調用它:接受解體的對象作爲唯一的參數,以箭頭功能

function login(callback) { 
    /* do login ; */ 
    callback({ username: 'u', email: '[email protected]' }); 
} 

如果我嘗試:

login(obj => { console.log(obj.username); }); 

一切都很好,但如果我嘗試:

login({username, email} => { console.log(username); }); 

我得到 'VM880:2未捕獲的SyntaxError:意外的標記}(...)'

爲什麼這個不行,我怎麼能得到它的工作?

+0

你需要用括號中的解構後的參數,即「登錄(({ ...})=> {console.log(...)})' –

回答

3

的問題是非常相似的starting a statement with a curly brace情況。

的開口大括號標誌着一個碼塊的開始。但解構對象模式{username, email}不是代碼塊。破壞模式周圍的括號強制它被評估爲一個表達式。正如Paulpro已經提到的,解決的辦法是把括號內的對象模式{username, email}各地:

login(({username, email}) => { console.log(username); });

也請參閱pitfalls of destructuring