2016-09-25 63 views
-2

例如,我有这个功能跳过函数参数的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]确定参数的指标?

+2

为什么使用这么多下划线? –

+0

'数字[1]和[5]决定参数索引?',因为您使用的是javascript,而不是您为满足您的紧急需求而编写的某种语言 –

回答

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

在那里,我们定义的实际参数将是一个对象,而不是离散参数,但我们收到对象的离散参数性能。我们定义对象中的每个属性都有一个默认值,并且该对象也是可选的(最后的={})。 (如果您不想让example()成为有效呼叫,您可以不要使用={}。)