是的,完全有可能!
解决方案 1:
function foo({
foo = 'foo',
bar = 'bar',
baz: {
propA = 'propA',
propB = 'propB'
} = {}
}) {
console.log(foo)
console.log(bar)
console.log({propA, propB}) // Because `bar` is renamed to `{propA, propB}`. Hence, no local variable named `baz`
}
解决方案 2(解决方法):
function foo({
foo = 'foo',
bar = 'bar',
baz = {}
}) {
// ...
const baz2 = Object.assign({}, {propA: 'propA', propB: 'propB'} = {})
console.log(baz2) // Yeah, not really a solution
}
你甚至可以这样做:
const func = ([{foo, bar: {a, b: BB, c: CC = 'c'} = {}} = {}], ...{0: rest0 = 0, 1: rest1 = '1'}) => { /* do stuffs */ }
上面的代码是一个复杂的例子,我会用更简单的例子来解释:
示例 1:
const f1 = ({x: varx}) => console.log(varx)
当您调用f1(obj) 时,obj.x 将被分配给varx 在f1 的范围内
示例 2:
const f2 = ({xy: {x, y}}) => console.log({x, y})
类似于f1,但用{x, y}代替varx,obj.xy将分配给{x, y},所以x = obj.xy.x和y = obj.xy.y
示例 3:现在让我们添加创建默认参数
const f3 = ({xy: {x, y} = {}}) => { /* do stuffs */ }
现在,您仍然需要将 obj 作为对象传递,但您不再需要提供 obj.xy。如果obj.xy 是undefined,x 和y 是undefineds
示例 4:现在,让 x 和 y 具有默认值
const f4 = ({xy: {x = 'XXX', y = 'YYY'} = {}}) => { /* do stuffs */ }
如果你传递的obj.xy是undefined,{x, y}将被设置为{x: undefined, y: undefined},但由于x和y也有默认值,x将是'XXX'和@987654357 @ 将是'YYY'
示例 4:“终极生命形态”
const f5 = ({xy: {x = 'XXX', y = 'YYY'} = {}} = {}) => { /* do stuffs */ }
我想我不必再解释了:D