【问题标题】:Callbacks using multiple functions [closed]使用多个函数的回调[关闭]
【发布时间】:2018-03-30 09:23:08
【问题描述】:

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

实现一个函数pipe(),它接受多个函数作为参数并返回一个新函数,该函数将其参数传递给第一个函数,然后将结果传递给第二个函数,然后将第二个函数的结果传递给第三个函数,然后以此类推,最后返回最后一个函数的输出。换句话说,调用pipe(foo, bar, baz)(1, 2, 3) 就相当于调用baz(bar(foo(1,2,3)))

【问题讨论】:

  • pipe 接受三个函数作为其参数。它返回一个接受三个值作为参数的函数。该函数的结果应该等同于调用baz(bar(foo(1,2,3)))
  • 欢迎来到 Stack Overflow!请拿起tour,环顾四周,通读help center,尤其是How do I ask a good question? 分配通常不是任意的;您的讲师、教程或课程将涵盖使您能够做到这一点的必要主题。 查看您的课程资料、课堂笔记等,并尝试完成工作如果您遇到特定问题,请彻底研究它,search thoroughly here,如果您仍然遇到问题,请发布您的代码和问题描述。人们会很乐意提供帮助。

标签: javascript callback


【解决方案1】:

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

  1. 它使用 3 个参数调用管道函数:foo、bar 和 baz。这个函数返回一个值,这里可能是一个函数。
  2. 它使用 3 个参数调用此函数(由管道函数返回的函数):1、2 和 3。

剩下的作业由你来做 :)

【讨论】:

    【解决方案2】:

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

    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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多