2014-09-03 163 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