如何将Js函数数组传递给另一个Js函数?

时间:2016-07-28 10:04:16

标签: javascript node.js

我是java脚本的新手。我正在编写一些异步函数,让我们说func1, func2, func3。但他们必须一个接一个地执行。所以我决定使用async lib来逐个执行。

脚本文件:

 function func1(param1,param2){
  //dosomething ..
 }
 function func2(param3,param4){
  //dosomething ..
 }
 function func3(param5,param6){
  //dosomething ..
 }
 function myfunction(arr){
   console.log(arr);
   async.series(arr,function(){
      //do something ..
 });
 }

HTML文件:

<a onclick="myfunction([func1('p1','p2'),func2('p3','p4'),func('p5','p6')])"></a>

但是,当我尝试console.log时,它正在提供null,null,null

请给我一些解决方案。

1 个答案:

答案 0 :(得分:7)

您没有传递一系列函数引用,而是传递了调用这些函数的结果数组。该数组将包含返回的任何函数(如果它们不返回任何内容,则为undefined。)

如果要创建带有“烘焙”参数的函数引用,可以使用Function#bind执行此操作:

myFunction([func1.bind(null, 'p1','p2'), ...])
//               ^^^^^^^^^^^^         ^

Function#bind创建了一个新函数,在调用时,会调用具有给定this值的原始函数(我在假设上使用null this isn不重要)和你给出的参数bind(后面跟着调用新函数的任何参数)。

示例:

myfunction([
  func1.bind(null, 'p1', 'p2'),
  func1.bind(null, 'p3', 'p4'),
  func1.bind(null, 'p5', 'p6')
]);
function func1(arg1, arg2) {
  console.log("func1 got (" + arg1 + "," + arg2 + ")");
}
function myfunction(functions) {
  functions.forEach(function(f) {
    f();
  });
}