在JavaScript和PHP中为函数使用命名参数是否有任何缺点。我没有看到任何不利因素。事实上你需要提取它们(尽管你绝对不必猜测) - 但你可以使用它作为使用默认值的方式。例如
使用Javascript:
function myFunction (opt)
{
var name = opt.name || 'Barry',
age = opt.age || 26,
eyes = opt.eyes || 'brown';
}
并称之为:
myFunction ({
name: 'Fred',
age: 56,
eyes: 'pink'
})
PHP
function myFunction ($opt)
{
$name = $opt['name'] ? $opt['name'] : 'Barry';
$age = $opt['age'] ? $opt['age'] : 26;
$eyes = $opt['eyes'] ? $opt['eyes'] : 'brown';
}
编辑:也许在这里使用extract()函数可以使事情变得更容易。
并称之为:
myFunction ([
'name' => 'Fred',
'age' => 56,
'eyes' => 'pink'
])
答案 0 :(得分:4)
在Javascript中,您可以使用默认值,例如
function myFunction({ name = 'Barry', age = 26, eyes = 'brown'} = {}) {
console.log(name, age, eyes);
}
myFunction();
myFunction({ name: undefined, age: 30 });
myFunction({ name: 'jane', age: 35, eyes: 'blue' });

答案 1 :(得分:2)
在JavaScript和PHP中为函数使用命名参数是否有任何缺点
只有一个。 PHP和JavaScript都不支持命名参数。
修改强>
这里wiki page on命名参数究竟是什么,因为许多人似乎错误地认为这个概念。
答案 2 :(得分:1)
您正在谈论的是选项对象,而不是命名参数。命名参数在JavaScript中不可用,看起来像下面一行。请注意,参数不在对象内:
myFunction( name: 'Fred', age: 56, eyes: 'pink' );
如果要传递多个参数,则使用选项对象而不是单个函数参数非常有用。该对象不必担心排序,或者元素是否是可选的。
ES2015支持解构和默认设置,这可以进一步简化这一点,虽然格式化起初可能看起来非常不同......
function myFunction ({ name = 'Barry', age = 26, eyes = 'brown'})
{
console.log(name, age, eyes);
}
如果没有传递对象,则此函数将抛出错误,但它可以接受空对象或具有任意数量的那些键的对象。正如Nina的回答所示,您需要另一个默认值来阻止该错误:
function myFunction ({ name = 'Barry', age = 26, eyes = 'brown'} = {})
{
console.log(name, age, eyes);
}