将可变数量的参数从一个函数传递到另一个函数

时间:2011-09-04 17:49:56

标签: javascript

  

可能重复:
  Is it possible to send a variable number of arguments to a JavaScript function?

我可以使用arguments在函数中获取可变数量的参数,但是如何在不知道其原型的情况下将它们传递给另一个函数?

function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f) { f(arguments); } // not correct, what to do?
run(show, 'foo', 'bar');

注意:我无法保证传递给f的函数run所需的参数数量。意思是,即使显示的示例有2个参数,它也可能是0无限,因此以下不适合

function run(f) { f(arguments[1], arguments[2]); }

4 个答案:

答案 0 :(得分:28)

将以编程方式生成的参数集传递给函数的主要方法是使用函数的“apply”方法。

function show(foo, bar) {
  window.alert(foo+' '+bar);
}
function run(f) {
  // use splice to get all the arguments after 'f'
  var args = Array.prototype.splice.call(arguments, 1);
  f.apply(null, args);
}

run(show, 'foo', 'bar');

答案 1 :(得分:6)

如果我理解你的问题,你实际上可以通过申请来做到这一点:

function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f, args) { f.apply(null,args); } 
run(show, ['foo', 'bar']);

答案 2 :(得分:2)

你需要使用apply函数..这是你怎么做的:

function variableFunction1()  
    {  

   alert("variableFunction1 arguments length: " + arguments.length);  

   // calls second varargs function keeping current 'this'.  
   variableFunction2.apply(this, arguments);  
}  

function variableFunction2()  
{  

   alert("variableFunction2 arguments length: " + arguments.length);  
}  

variableFunction1('a','b','c');  

<强> Demo

答案 3 :(得分:0)

在您的示例中传递变量参数以显示此作品

function show(foo, bar) { window.alert(foo+' '+bar); }
function run(f) { f.apply(null, Array().slice.call(arguments, 1)); }
run(show, 'foo', 'bar');