为什么下面的函数执行 `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')
。他们不是达到同样的结果吗?那么,为什么?
在给定的代码块中,greet
函数接受一个 属性 为“name”的对象。查看调用的外观:greet({ name: 'Larry' }) // Hi Larry!
如果您编写 function greet(name = "Rauno") { /***/ }
该函数将接受单个字符串参数,因此您可以像 greet("@Grateful");
那样调用它
简短的回答是否定的。
假设你有你的函数并像下面这样调用它:
function greet({ name = 'Rauno' }) {
console.log(`Hi ${name}!`);
}
greet(); // throws reference error
你没有传递任何东西(隐式 undefined
)作为第一个参数。所以 javascript 在尝试访问 undefined.name
时失败并抛出引用错误。因为 undefined
不是对象,也没有名称 属性。所以你应该为参数设置一个默认值来覆盖 undefined
个案例。然后 javascript 尝试检索 {}.name
,它是 undefined
并且检索名称的默认值(在您的例子中是 Rauno)。
function greet({ name = 'Rauno' } = {}) {
console.log(`Hi ${name}!`);
}
greet() // Hi Rauno!
greet({ name: 'Larry' }) // Hi Larry!
不过,我了解这里的基本功能...我不明白需要做什么 greet({ name = 'Rauno' } = {})
而不是 greet(name = 'Rauno')
。他们不是达到同样的结果吗?那么,为什么?
在给定的代码块中,greet
函数接受一个 属性 为“name”的对象。查看调用的外观:greet({ name: 'Larry' }) // Hi Larry!
如果您编写 function greet(name = "Rauno") { /***/ }
该函数将接受单个字符串参数,因此您可以像 greet("@Grateful");
简短的回答是否定的。
假设你有你的函数并像下面这样调用它:
function greet({ name = 'Rauno' }) {
console.log(`Hi ${name}!`);
}
greet(); // throws reference error
你没有传递任何东西(隐式 undefined
)作为第一个参数。所以 javascript 在尝试访问 undefined.name
时失败并抛出引用错误。因为 undefined
不是对象,也没有名称 属性。所以你应该为参数设置一个默认值来覆盖 undefined
个案例。然后 javascript 尝试检索 {}.name
,它是 undefined
并且检索名称的默认值(在您的例子中是 Rauno)。