这是代码,
export function createConnect({
connectHOC = connectAdvanced,
mapStateToPropsFactories = defaultMapStateToPropsFactories,
mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories,
mergePropsFactories = defaultMergePropsFactories,
selectorFactory = defaultSelectorFactory
} = {}) {...}
函数参数声明中{connectHOC = connectAdvanced ...} = {}是什么意思?
我知道
= {}
可能意味着函数参数的默认值,但是前面括号内代码的用法是什么?
答案 0 :(得分:8)
这是ES2015语法。您的函数声明将Destructuring assignment与默认值组合在一起。
这是使用对象的基本解构分配:
var {a, b} = {a: "foo", b: "bar"};
console.log(a); // "foo"
console.log(b); // "bar"

您可以在左侧添加默认值:
var {a = "foo", b = "bar"} = {};
console.log(a); // "foo"
console.log(b); // "bar"

当你在声明一个函数时命名参数时,你不能使用var
,而对象解构它将是相同的:
function test({a = "foo", b = "bar"}){
console.log(a + b);
}
test({}); // "foobar"
test({b: "boo"}); // "fooboo"

当然,你可以定义一个默认值,这样你的函数就不必采用任何参数。
function test({a = "foo", b = "bar"} = {}){
console.log(a + b);
}
test(); // "foobar"

答案 1 :(得分:3)
它只是使用解构来执行默认参数的方式。您需要最后一位作为默认值。
请考虑以下内容,例如该示例使用destructuring assignment:
function withDefault({parameter=something} = {}) {
console.log(parameter)
}
let something = 1;
withDefault();

与缺少默认值的那个相比,它会抛出错误:
function withoutDefault({parameter=something}) {
console.log(parameter)
}
let something = 1;
withoutDefault();
// It needs to be called as withoutDefault({}), withoutDefault(1) or
// with some value, since the function signature doesn't define a default
// in this case.