使用函数的命名参数

时间:2017-09-07 11:28:35

标签: javascript php function

在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'
])

3 个答案:

答案 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);
}