[英]Why is the following function doing `greet({ name = 'Rauno' } = {})` instead of `greet(name = 'Rauno')`?
function greet({ name = 'Rauno' } = {}) {
console.log(`Hi ${name}!`);
}
greet() // Hi Rauno!
greet({ name: 'Larry' }) // Hi Larry!
虽然,我了解这里的基本功能......我不明白需要做什么greet({ name = 'Rauno' } = {})
而不是greet(name = 'Rauno')
。 他们不是达到同样的结果吗? 所以为什么?
最简洁的答案是不。
假设你有你的 function 并像下面这样称呼它:
function greet({ name = 'Rauno' }) {
console.log(`Hi ${name}!`);
}
greet(); // throws reference error
你没有传递任何东西(隐式undefined
)作为第一个参数。 所以 javascript 在尝试访问undefined.name
时失败并抛出引用错误。 因为undefined
不是 object 并且没有 name 属性。 所以你应该为参数设置一个默认值来覆盖undefined
的情况。 然后 javascript 尝试检索{}.name
,它是undefined
的,并且检索了 name 的默认值(在你的例子中是 Rauno)。
在给定的代码块中, greet
语 function 接受一个属性为“name”的 object。 查看调用的样子: greet({ name: 'Larry' }) // Hi Larry!
如果你写function greet(name = "Rauno") { /***/ }
那 function 会接受一个字符串参数,所以你会这样称呼它greet("@Grateful");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.