0

我有一个功能:

function bla(param1) {
    // do stuff
}

如果我将其更改为:

function bla(param1, param2) {
    // do stuff
}

这会影响函数的工作方式吗?即我可以像这样运行这个函数:

function("one");

像这样:

function ("one", "two");

两者都适用于所有情况吗?如果是这样,第二个参数是否会为空?

4

3 回答 3

4

不,javascript 不知道签名。但是您可以执行以下操作:

function suchandso(){
  switch (arguments.length) {
     case 1: /*...*/ break;
     case 2: /*...*/ break;
     case n: /*...*/ break;
     default: /*...*/
  }
}
于 2013-06-10T06:21:06.580 回答
2

好吧,这几乎不是您所谓的重载,但是您尝试做的事情是允许的:

function f(a,b)
{
    if (b === undefined)//or typeof b === 'undefined'
    {
        console.log('Only param a was passed to me');
        return;//end function
    }
    console.log('Both params were passed');
}

当然,现在如果我要显式调用 set to undefined ,上面的代码将不会接受这一点fb这就是对象进来的地方arguments

function f(a,b)
{
    if (b === undefined && arguments.lenght < 2)//or typeof b === 'undefined'
    {
        console.log('Only param a was passed to me');
        return;//end function
    }
    b = b || 'default value';//fix possibly undefined value
    console.log('Both params were passed');
}

或者,您可以一直使用单个参数,并将其视为对象文字:

function f(o)
{
    o = o || {a: 'foo', b: 'bar'};//default object literal
    var a = o.a || 'default a',
    b = o.b || 'default b';
}

你有很多选择,我会说

于 2013-06-10T06:21:22.330 回答
0

JavaScript 不支持方法重载,最后一个函数将优先于所有其他函数。如果您希望使用多个变量,其中一些变量可能是可选的或不同的,您始终可以使用检查您的函数typeof并确定发送了哪些变量集。或者更好的是,您可以使用对象文字{}并发送不同数量的变量作为键/值对中的参数,您可以根据需要检查和使用它们。例如:

function a(obj) {console.log(obj);}

a({key1: 'value1', key2: 'value2'}); // and so on...
于 2013-06-10T06:22:19.980 回答