JavaScript(ES6):命名参数和默认值

8

我来自Python,非常喜欢设置命名参数和默认值的方式。现在似乎ES6也允许我做类似的事情。但我看不出为什么最后一个调用会出错:

fun = ({first=1, last=1}) => (1*first+2*last)

console.log("-----------")

console.log( fun({first:1, last:2}) )

console.log("-----------")

console.log( fun({last:1, first:2}) )

console.log("-----------")

console.log( fun() ) // Breaks

2
JavaScript没有命名参数。对象解构不同,即使它可以用于实现接近命名参数的功能。你不应该以相同的方式处理它们。 - deceze
这是因为你把它们当作kwargs来考虑了。这不是同一回事。下面有好的答案。 - Adam Hopkins
2个回答

30

你需要一个默认对象。

var fun = ({ first = 1, last = 1 } = {}) => 1 * first + 2 * last;
//                                 ^^^^

console.log(fun({ first: 1, last: 2 }));
console.log(fun({ last: 1, first: 2 }));
console.log(fun());


3
因为你需要一个可以被解构的对象:
fun({})

喜欢这个答案是因为它让我记住了我总是必须传递一个对象。 - Norfeldt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接