繁体   English   中英

默认功能参数

[英]Default function parameters

嗨,我必须承认我仍然掌握了许多ES6语法,即使我已经使用了相当多的ES6语法。 例如,我知道您可以执行console.log(multiply(5))来获取给定函数的结果

function multiply(a, b = 1) {
  return a * b;
}

但是,假设你有

function multiply(a, b = 1, c) {
  return a * b * c;
}

显然你不能这样做(console.log(multiply(5,,5)) 。在这种情况下,重新排列函数中的参数位置成为function multiply(a, c, b = 1)唯一可行的方法吗?或者还有其他更聪明的方法吗?

您可以传递undefined来使用默认值:

function multiply(a, b = 1, c) {
  return a * b * c;
}

multiply(2, undefined, 3); // 6

您可以阅读有关默认参数值的信息,并在MDN上查看更多示例

另一种选择是使用默认属性赋值而不是多个单独的参数传递单个对象

 function multiply({ a, b = 1, c }) { return a * b * c; } console.log(multiply({ a: 3, b: 4, c: 5 })); console.log(multiply({ a: 3, c: 5 })); 

您可以将默认参数设置为第一个,然后展开 其余参数 这样做的一个好处是,您现在不仅限于3个数字;

  function multiply(a = 1, ...args) { args = [a, ...args]; return args.reduce((x, y) => x * y); } console.log(multiply(5)); console.log(multiply(5, 10, 15, 20, 25)); 

不幸的是,JS不支持函数参数的精简(跳过),所以你不能简单地写

f(1,,2)

并期望第二个参数是默认值。 您可以使用数组元素代替:

 function f(a, b = 99, c) { console.log(a, b, c) } f(...[1,,2]) 

不确定这是否值得麻烦。

正如@Dave Marshall所提到的,传递undefined的最直接的方式,我会以更易读的形式使用它,这清楚地说明了哪个参数被省略:

 function f(a, b = 99, c) { console.log(a, b, c) } f(1, void 'b', 2) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM