2016-09-25 3 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}));

Там мы определяем, что фактический аргумент будет объектом, а не дискретные аргументы, но мы получить свойства этого объекта в качестве дискретных аргументов. Мы определяем, что каждое свойство объекта имеет значение по умолчанию и что объект iself также является необязательным (={} в конце). (Вы можете оставить ={}, если вы не хотите делать действительный звонок example().)

Смежные вопросы