传递一组参数

asu*_*and 2 javascript functional-programming

我正在尝试使用一个传递函数的函数,并使用一组args调用它.例如:

function foo(func, args) {
  return func(args);
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道args中可能有多少个元素,而func应该能够成为任意数量的args的任意函数.我该如何处理?

另外说我想存储传递给foo的函数,只有在之前没有调用它们时才调用它们.

我可以这样做:

var calledFuncs = [];
function foo(func, args) {
  if(calledFuncs.indexOf(func) === -1) {
    calledFuncs.push(func);
    return func(args);
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢,我对JavaScript中的函数式编程有点新意.

pim*_*vdb 8

您正在寻找func.apply:

  • 第一个参数是上下文aka this值.你不想改变它,所以传递它.
  • 第二个参数是一个包含参数的数组,当然可以是动态长度.

所以你可以这样做:

return func.apply(this, args);
Run Code Online (Sandbox Code Playgroud)

你似乎对第二个问题有了很好的解决方法(func(args)替换后).但是,您可能希望存储被调用函数的返回值,因为foo现在返回undefined除第一个之外的任何调用.