例如我有这个功能
function example(a=1,b=1,c=1,d=1,f=1) {
return (a*b*c*d*f)
}
所以我有一个带参数的简单函数,它有默认值。
现在当我调用函数时,如果我想与f
相乘。我需要这样做:
example(3,1,1,1,5)
为什么我不能简单地写出第一个和最后一个参数?这是可能的,例如:
example(3[1],5[5])
其中数字[1]
和[5]
确定参数索引?
答案 0 :(得分:0)
为什么我不能简单地写出第一个和最后一个论点......
因为这不是JavaScript规范中定义函数调用的方式。这是唯一的原因。
如果您不确定要传递给函数的参数数量,我建议传递一个对象。
如果我在你的位置,我会在ES5及更早版本中将其写成如下:
function example(params) {
var DEFAULT = 1
var a = params.hasOwnProperty('a') ? params.a : DEFAULT;
var b = params.hasOwnProperty('b') ? params.b : DEFAULT;
var c = params.hasOwnProperty('c') ? params.c : DEFAULT;
var d = params.hasOwnProperty('d') ? params.d : DEFAULT;
var e = params.hasOwnProperty('e') ? params.e : DEFAULT;
return (a * b * c * d * e);
}
console.log(example({a: 3, b: 5}));
在ES2015及更高版本中(您使用默认参数,因此我假设您对ES2015功能感到满意),您可以使用默认参数和解构的组合更清晰地完成上述操作:
// This snippet requires that your browser support ES2015's default arguments and destructuring
function example({a=1,b=1,c=1,d=1,f=1}={}) {
// Note -------^-------------------^^^^
return (a*b*c*d*f);
}
console.log(example({a:3,f:5}));
在那里,我们定义实际参数将是一个对象,而不是离散参数,但我们接收该对象的属性作为离散参数。我们定义对象中的每个属性都有一个默认值,并且对象iself也是可选的(最后是={}
)。 (如果您不想让={}
成为有效的电话,可以不使用example()
。)