2016-09-25 77 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()成爲有效呼叫,您可以不要使用={}。)