伙计们,这里有一些理论。
有一个函数 -
function lol( { x = 10 } = {}, { y } = { y : 10 } ) {
console.log( x, y )
};
事情变得很棘手
lol(); // 10, 10
lol( {}, {} ); // 10, undefined
- 为什么我在传递空对象后得到
undefined
? - 为什么当 lol() 时,
y
的默认值为10
?
我迷路了,需要帮助!
最佳答案
如果你这样做:
(function ({x = 10}) {
console.log(x)
})()
将会出现 TypeError: Cannot match against 'undefined' or 'null' 如果你尝试:
(function ({x} = {}) {
console.log(x)
})()
现在,这给出 undefined
.
如下:
function({x} = {}) { ... }
x
与 undefined
匹配,因为赋值右侧没有属性具有 x
属性。
function({x = 10} = {}) {...}
再次,x
与 undefined
匹配因此,它采用默认值 10
.
另一方面,你的第二个论点(单独考虑)
function({ y } = { y : 10 }) {...}
在这里,比赛发生了 y
获取值为 10
但是当你传递一个空对象时,默认参数对象 {y : 10}
被覆盖。
这相当于:
function({ y } = {}) {...}
在这里,你没有任何东西可以匹配 y,所以它被设置为 undefined
关于javascript - 函数的默认参数值、解构赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42390777/