2014-09-03 180 views
3

javascript初學者在這裏。Javascript跳過參數函數調用

比方說,我有一個javascript函數,有3個參數:

function f(arg1, arg2, arg3) { // do stuff } 

我知道我可以調用F(值1,值2);在這種情況下,函數範圍arg1將是value1,arg2將是value2,arg3將是null。

一切都OK了。但是,如果我想調用只給arg1arg3賦值的函數,我需要這樣做:f(value1, null, value2);

有沒有一種方法,我可以指定哪些參數具有更多的C# - 亂七八糟的方式(沒有指定沒有給出參數爲null)?這樣的事情:對於調用f值只爲arg1arg3我會寫f(value1, arg3 = value2);

任何想法? 乾杯!

+0

我認爲沒有運氣 – Girish 2014-09-03 11:06:37

+0

不,但您可以傳遞2個參數並檢查後者的類型 – Johan 2014-09-03 11:07:19

回答

1

如果你打算做(讓我們說這是有效的)

f(value1, arg3 = value2) 

然後論點2將是不確定的,所以只是傳遞:

f(value1, undefined, value2) 
2

只有這樣,你就可以用JS做這件事是傳遞一個包含所有參數的數組。

您的默認值將不得不在函數中設置 - 您無法在JavaScript中爲參數定義默認值。

function foo(args){ 
    var arg1 = args[ 0 ] || "default_value"; 
    var arg2 = args[ 1 ] || 0; 
    ///etc... 
} 

更妙的是,而不是數組,你可以通過一個簡單的對象,它可以讓你通過自己的對象鍵訪問參數:

function foo(params){ 
    var arg1 = params[ "arg1" ] || "default_value"; 
    var arg2 = params[ "arg2" ] || 0; 
    ///etc... 
} 
+0

+1這可以替代 – Girish 2014-09-03 11:08:52

0

將此代碼添加到您的函數(默認值)

function f(a, b, c) 
{ 
    a = typeof a !== 'undefined' ? a : 42; 
    b = typeof b !== 'undefined' ? b : 'default_b'; 
    a = typeof c !== 'undefined' ? c : 43; 
} 

呼叫這樣

f(arg1 , undefined, arg3) 
功能
5

有一種方法,我已經看到了這一點:

例如

function person(name,surname,age) 
{ 
... 
} 

person('Xavier',null,30); 

,你可以這樣做:

function person(paramObj) 
{ 
    var name = paramObj.name; 
    var surname = paramObj.surname; 
    var age = paramObj.age; 
} 

調用是這樣的:

person({name:'Xavier',age:30}); 

我認爲這是最接近你能夠做到這一點,就像在C#中記住JS沒有被壓縮,所以你不能預測函數的參數。

1

是的,你可以。它可寫爲:

function f(arg1, undefined, arg3) { // do stuff } 

在這個調用中的參數1 & 3將通過和參數2將不被髮送。

+1

參數2將被髮送並且它將具有值「undefined」 – Vee6 2016-02-24 15:45:24