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