使用多个函数的回调

时间:2017-10-18 13:23:22

标签: javascript callback

我收到了以下javascript问题并提出了一些问题。 pipe(foo,bar,baz)(1,2,3)做了什么?它是否通过3个参数传递3个函数?我不清楚表达式的语法。

实现一个函数pipe(),它接受​​几个函数作为参数,并返回一个新函数,将其参数传递给第一个函数,然后将结果传递给第二个函数,然后将第二个函数的结果传递给第三个函数等等,最后返回最后一个函数的输出。换句话说,调用pipe(foo, bar, baz)(1, 2, 3)等同于调用baz(bar(foo(1,2,3)))

2 个答案:

答案 0 :(得分:1)

pipe(foo, bar, baz)(1, 2, 3)这样做:

  1. 它使用3个参数调用管道函数:foo,bar和baz。这个函数返回一个值,这里可能是一个函数。
  2. 它使用3个参数调用此函数(管道函数返回的函数):1,2和3。
  3. 其余的功课取决于你:)

答案 1 :(得分:0)

函数调用该函数后的括号。如果括号内有标识符或文字值(多个用逗号分隔),则这些值作为输入传递给函数。所以,表达式的第一部分:

pipe(foo, bar, baz)

只是调用pipe,在这种情况下,foobarbaz是对3个函数的引用(不是对函数的调用,只是引用它们。)

现在一个函数可以返回一个值,该值本身可以是一个函数。所以,如果是这种情况并且我们“评估”pipe的返回值,则可能会发出调用此内容的信息:

pipe(foo, bar, baz);

结果如下:

function(a, b, c) {
    // do something with a, b and c
}

在这种情况下,原始代码的剩余部分(1, 2, 3)将用于调用返回的函数,并将1, 2, 3作为输入参数传递给它。

这是一个有效的例子:

function foo(x, y, z){
  console.log(x, y, z);
}

function bar(){
   // Not relevant to question/solution
}

function baz(){
   // Not relevant to question/solution
}

// This function expects 3 functions as input
function pipe(funcA, funcB, funcC){
  // When this function is called, it returns another 
  // function...
  return function(num1, num2, num3){
    // And that function calls other functions, using the input
    // from pipe and passing it along to foo
    funcC(funcB(funcA(num1, num2, num3)));
  }
}

pipe(foo, bar, baz)(1, 2, 3);