Javascript 为什么下面的函数要执行“greet({name=&&x27;Rauno&&x27;}={})”而不是“greet(name=&&x27;Rauno&&x27;”?

Javascript 为什么下面的函数要执行“greet({name=&&x27;Rauno&&x27;}={})”而不是“greet(name=&&x27;Rauno&&x27;”?,javascript,object,ecmascript-6,default-value,Javascript,Object,Ecmascript 6,Default Value,虽然,我理解这里的基本功能。。。我不明白需要做什么greet({name='Rauno'}={})而不是greet(name='Rauno')。他们不是达到了同样的结果吗?那么,为什么呢?在给定的代码块中,greet函数接受一个属性为“name”的对象。看看通话的样子:greet({name:'Larry'})//嗨,Larry 如果您编写了函数greet(name=“Rauno”){/***/},那么该函数将接受单个字符串参数,因此您可以像greet(“感激”)一样调用它简短的答案是否定的。

虽然,我理解这里的基本功能。。。我不明白需要做什么
greet({name='Rauno'}={})
而不是
greet(name='Rauno')
。他们不是达到了同样的结果吗?那么,为什么呢?

在给定的代码块中,
greet
函数接受一个属性为“name”的对象。看看通话的样子:
greet({name:'Larry'})//嗨,Larry


如果您编写了
函数greet(name=“Rauno”){/***/}
,那么该函数将接受单个字符串参数,因此您可以像
greet(“感激”)一样调用它

简短的答案是否定的。
假设您有自己的函数,并按如下方式调用它:

function greet({ name = 'Rauno' } = {}) {
  console.log(`Hi ${name}!`);
}
 
greet() // Hi Rauno!
greet({ name: 'Larry' }) // Hi Larry!

您没有传递任何内容(隐式地
未定义的
)作为第一个参数。所以javascript在尝试访问
未定义的.name
时失败,并抛出引用错误。因为
undefined
不是对象,也没有name属性。因此,您应该为参数设置一个默认值,以覆盖
未定义的情况。然后javascript尝试检索
{}.name
,它是
未定义的
,并且检索到name的默认值(在你的例子中是Rauno)。

这是默认参数值和对象解构的混合谢谢你的回答,它确实帮助我更好地理解了其他答案。不幸的是,我没有能力选择多个答案。
function greet({ name = 'Rauno' }) {
  console.log(`Hi ${name}!`);
}

greet(); // throws reference error