将任意数量的参数传递给Javascript函数[重复]

Posted

技术标签:

【中文标题】将任意数量的参数传递给Javascript函数[重复]【英文标题】:Pass in any number of arguments into a Javascript function [duplicate] 【发布时间】:2017-11-09 10:02:39 【问题描述】:

我希望能够将任意数量的参数传递给函数,然后能够在以后使用这些参数。我知道我可以传入默认参数,但我不知道在我的函数中声明什么。

例如,

function test(????) 
  console.log(a)
  console.log(b)
  console.log(c)


test(a="a", b="b", c="c")

我也面临着被赋予这个功能并尽可能少地改变 var 声明的挑战。所以这里声明了变量 a、b 和 c,我无法编辑这些变量。我应该能够传入参数,然后知道将自己分配给这些变量。

function test(???) 
  var a,b,c
  if (a>b)
    c = a + b
  


test(a=2,b=3)

【问题讨论】:

也许看看这个? w3schools.com/js/js_function_parameters.asp developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案1】:

你应该使用数组或对象。

在该数组中添加任意数量的参数。

function test(arr) 
   console.log(arr.a);
   console.log(arr.b);
   console.log(arr.c);


arr = 
   
arr.a = "a";
arr.b = "b";
arr.c = "c";
    
k = test(arr);
    
    

【讨论】:

这就是我的想法,除了我正在使用一个预先设置变量的函数,这意味着我无法更改 var 声明。我必须确保传递给函数的内容,我的参数需要与函数内部的相应声明连接。 @jamesvphan 这不是问题,只需将它们分配给新创建的对象即可。【参考方案2】:

你可以传入一个对象或数组:

function test1([a, b, c]) 
   // ...

test1([1, 2, 3]);

function test2( a, b, c ) 
   // ...

test2( a: 1, b: 2, c: 3 );

【讨论】:

【参考方案3】:
function test(input) 
  console.log(input.a);
  console.log(input.b);
  console.log(input.c);


test( a: 1, b: 2, c: 3 );

【讨论】:

【参考方案4】:

您实际上不需要在函数参数中定义任何参数。您需要做的就是访问javascript 内置的arguments 对象。

所以您的代码可能如下所示:

function test() 
    var a = arguments[0];
    var b = arguments[1];
    var c = arguments[2];

    console.log(a);
    console.log(b);
    console.log(c);


test("a", "b", "c");

供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

【讨论】:

这太棒了!我需要什么!【参考方案5】:

使用数组是个好主意,但为了完整性...

ES6 方式!

如果您能够支持 ES6 功能,spread operator 与 arguments 关键字相结合是一种巧妙的解决方法:

function anyNumber() 
  console.log(...arguments); // ->  1 2 3 4

  let argsAsArray = [0, ...arguments, 5]; // now they're an array

  argsAsArray.forEach(s => console.log(s)); // -> 0 1 2 3 4 5
;

anyNumber(1,2,3,4);

使用扩展运算符可以做很多很酷的事情,尤其是对象和参数解构。

【讨论】:

是的,我认为在这种情况下解构是我的最佳选择【参考方案6】:

在更新的问题中给定javascript,您可以在函数名称后的() 中定义默认参数。

function test(a = 2, b = 3) 
  let c;
  if (a > b) 
    c = a + b
   else 
    c = 0
  
  console.log(c);


test(); // 0

test(4); // 7

另见Can we set persistent default parameters which remain set until explicitly changed?

【讨论】:

我认为这是我需要的,但是代码 sn-p 给我一个来自 fn(...opts) 函数的错误 @jamesvphan 该错误可能是由于使用了对象休息...opts.map((prop, index)。对象休息a, b, ...rest 可在铬,铬使用--javascript-harmony 标志;或独立使用babel。将在 stacksn-ps 启用 babel @jamesvphan 查看更新的 stacksn-ps

以上是关于将任意数量的参数传递给Javascript函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给Lua 4中的函数[重复]

可以将可变数量的参数传递给函数吗?

将可变数量的 bash 命令行参数传递给 MATLAB 函数

JavaScript:将参数传递给回调函数

如何将无限参数和一个或两个参数传递给 JavaScript 函数? [复制]

任意数量的参数plsql