在Javascript中,第一个参数是否可能是可选的而第二个参数是强制性的?

时间:2018-07-12 05:25:59

标签: javascript ecmascript-6

这是功能:

let Func = (a=10, b) => {
  return a + b; 
 }

函数调用:

Func(null,20);

Func(20);

我想获取输出: 30

还有其他方法来调用函数并获得30输出吗?

3 个答案:

答案 0 :(得分:3)

JavaScript中没有函数重载。您最多可以得到的是可以在函数中使用命名参数:

let Func = ({a=10, b}) => {
  return a + b;
}

console.log(Func({b: 20}));

这显然改变了您调用函数的方式,但是它支持省略可选参数。

答案 1 :(得分:1)

Default parameters

  

默认函数参数允许在未传递任何值或未定义的情况下使用默认值初始化形式参数。

您可以传递undefined作为第一个参数。如上所述,请注意,传递null无效:

const Func = (a = 10, b) => {
  return a + b; 
}

console.log(Func(undefined,20));

如果您出于任何原因不能传递undefined,那么您最好的办法就是在函数内部显式测试a并重新分配如果需要的话。例如:

const Func = (a = 10, b) => {
  if (a === null) a = 10;
  return a + b; 
}

console.log(Func(null,20));

答案 2 :(得分:0)

您也可以尝试使用Destructuring assignment

想法是创建一个值数组并将其设置为必要的参数。您还可以基于优先级添加默认值。这样,您就无需构造输入或传递未定义的内容。

const Func = (...rest) => {
  const [ b, a ] = [ ...rest, 10 ]
  return a + b; 
}

console.log(Func(20));
console.log(Func(5, 20));

您甚至可以将其扩展为像这样工作,但是说您只想传递bd的值。这会产生问题,您将不得不依靠其他答案( preferred answer in my opinion )中讨论的方法之一。但是,如果问题陈述很直接,您可以尝试一下。

const Func = (...rest) => {
  const defaultValues = [ 10, 5, 20 ];
  const [ b, a, c, d ] = [ ...rest, ...defaultValues ]
  return a + b + c + d; 
}

console.log(Func(20));
console.log(Func(5, 20));
console.log(Func(5, 20, 25));
console.log(Func(5, 20, 25, 35));