JavaScript函数,它接受多组参数

时间:2015-11-13 15:44:56

标签: javascript

我将传递给这样的多组辩论者:

Myfunction(var1,var2)(var3,var4)(var5);

但我只知道如何获得第一组这样的基金:

function Myfunction() {
  for (var i = 0; i < arguments.length; i++) {
    alert(arguments[i]);
  }
}

它将返回var1, var2

我如何获得另一组aguments(var3,var4)(var5)等......?

我的参考:JavaScript variable number of arguments to function

3 个答案:

答案 0 :(得分:1)

我不知道你认为这个代码正在做什么:

Myfunction(var1,var2)(var3,var4)(var5)

但这是在调用三个函数。不是一个。为了说明你的论点可以在哪里:

function MyFunction() {
    // var1 and var2 are available here, because they were passed to this function
    return function() {
        // var3 and var4 were passed to THIS function
        return function() {
            // var5 was passed to THIS function
        }
    }
}

您无法访问var3中的var4var5MyFunction,因为它们未传递给该功能。它们被传递给该函数返回的函数。

如果您想将所有这些参数传递给MyFunction,请执行以下操作:

MyFunction(var1, var2, var3, var4, var5);

然后他们都可以使用:

function MyFunction() {
    // var1, var2, var3, var4, and var5 are all available here
}

答案 1 :(得分:1)

您可以在JavaScript中为函数提供的参数数量实际上是无限制的(规范中没有定义限制,但this answer表示Chrome的限制为65535)。

函数的arity是其定义中指定的参数数量。在JavaScript中,执行调用时可以安全地忽略函数的arity。你可以提供你喜欢的参数。

您可以获取与每个函数调用隐式关联的arguments数组类对象中的所有参数,或者如果您使用的是ES2015,则可以使用扩展运算符(如下所示)。

问题的第二个特性是您在多个调用中传播单个较大的操作。这被称为currying,是一种更先进的技术。在JavaScript中,您可以利用闭包来实现它。

此示例可能对您有所帮助:

function add(...args1) {
  if(!args1.length) {
    return sum(args1);
  }

  return (...args2) => {
    if(!args2.length) {
      return sum(args1.concat(args2));
    }

    return add.apply(null, args1.concat(args2));        
  };
}

function sum(arr) {
  return arr.reduce((p,c) => p+c,0);
}

console.assert(add(1,2)(3)(4)() === 10, '1+2+3+4 should be 10');

答案 2 :(得分:0)

你想要的东西可能就像那个简单

function myFunction(arg1, arg2, arg3, arg4, arg5) {
    // use all your arguments here
}

如果你想拥有一对参数,你可以发送数组作为参数,如:myfunction([0, 1], [34, 21], [2,7])

要像你一样实现函数调用,你需要做类似的事情(见下文),但这完全是疯了。

function myFunction(arg1, arg2) {
    return function(arg3, arg4) {
        return function(arg5) {
        }
    }
}