繁体   English   中英

为什么下面的 function 做的是 `greet({ name = 'Rauno' } = {})` 而不是 `greet(name = 'Rauno')`?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM