如何在JavaScript函数中使用可变数量的参数

时间:2013-10-18 01:08:47

标签: javascript

当有多个参数时,我无法理解如何从第二个函数返回信息。现在我知道以下代码可以正常工作。

function One() {
    var newVal = 0;
    newVal = Too(newVal);
    console.log(newVal);
}

function Too(arg) {
    ++arg;
    return arg;
}

但是,如果我尝试通过添加参数和setinterval来复杂化,那该怎么办呢。

function One() {
    var newVal = 0;
    var z = 3;
    var y = 3;
    var x = 1;
    newVal = Too(newVal);
    var StopAI2 = setInterval(function () {
        Too(x, y, z, newVal)
    }, 100);
}

function Too(Xarg, Yarg, Zarg, newValarg) {
    Xarg*Xarg;
    Yarg*Yarg;
    Zarg*Zarg;
    ++newValarg;
    return newValarg;
}

我不知道如何处理newVal =代码行。我只想返回newVal而不是x,y,z。

2 个答案:

答案 0 :(得分:3)

这是我认为你想问的问题:

  
    

当只传递一个参数时,如何对函数的第四个参数进行操作?

  

这个问题的答案是:

  
    

如果要对函数的第4个参数进行操作,则必须至少将4个参数传递给函数。

  

有几种方法可以区别对待您的问题。

#1

如果有一个参数总是必要的,请确保它是第一个参数:

 function Too(mandatoryArg, optionalArg1, optionalArg2) {
    alert(++mandatoryArg);
    if (optionalArg1) {
        alert(++optionalArg1);
    }
}

#2

传递所有未定义或未知参数的占位符值。

您可以使用nullundefined''

alert(Too(null, null, 4));

function Too(optArg1, optArg2, mandatoryArg) {
    alert(++mandatoryArg);
}

#3

根据参数的数量做出决定:

function Too(optArg1, optArg2, optArg3) {
    var numArgs = arguments.length;
    if (numArgs === 1) {
        alert(++optArg1);
    }
    if (numArgs === 3) {
        alert(++optArg3);
    }
}


修改

  
    

“这会在第一个函数中更新变量吗?”

  

让我们使用一个演示某些内容的实际示例:

function one() {
    var a = 0;
    var b = 25;
    var c = 50;
    var d = -1;

    d = two(a, b, c);

    alert("a: " + a);
    alert("b: " + b);
    alert("c: " + c);
    alert("d: " + d);
}

function two(a, b, c) {
    ++a;
    ++b;
    ++c;
    if (arguments.length === 1) {
        return a;
    }
    if (arguments.length === 3) {
        return c;
    }
}

调用one()会导致以下警告:

a: 0
b: 25
c: 50
d: 51

仅在函数 one()中修改了d的值。

那是因为d被分配了 two()的返回值。

two()内的abc的更改对a的值没有影响,{ {1}}以及 one()中的b

即使 two()的参数名为cab,也会出现这种情况。

以下是带有上述代码的fiddle



编辑#2

这是一种可以创建移动游戏对象的函数的方法:

c

这是一个fiddle,显示了另一种方法的工作演示。

答案 1 :(得分:2)

这里有两个概念。

1。可变数量的函数参数(或可选参数)。

如果要使用不同数量的参数调用相同的函数(这最终会导致令人头痛的事情),您需要确定(在函数内部)如何调用此函数。您可以在每个函数中使用arguments对象:

function Too() {
  if (arguments.length == 4) {
    arguments[0]*arguments[0];
    arguments[1]*arguments[1];
    arguments[2]*arguments[2];
    return ++arguments[3];
  } else if (arguments.length == 1) {
    return ++arguments[0];
  } else {
    // you decide what to do here
  }
}

2。异步代码执行。

实现间隔到期时调用的Too,在One完成并返回后执行良好。如果您希望Too影响newVal变量,并在某种程度上获得此新值,请将newVal变量设为全局变量。