跳过函数参数javascript

时间:2016-09-25 13:11:44

标签: javascript

例如我有这个功能

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]确定参数索引?

1 个答案:

答案 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()。)