2017-10-18 52 views
-6

我被给了下面的JavaScript问题,并有几个问题。 pipe(foo,bar,baz)(1,2,3)是做什么的?它是否通过3个参数传递3个参数?我并不清楚表达式的语法。使用多种功能的回调

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

+0

'pipe'接受三个功能作为它的参数。它返回一个接受三个值作为参数的函数。该函数的结果应该等同于调用'baz(bar(foo(1,2,3)))''。 – David

+0

欢迎来到Stack Overflow!请参阅[参考],环顾四周,并阅读[帮助],特别是[*我如何提出一个好问题?](/帮助/如何提问)作业通常不是任意的;你的教师,教程或课程将涵盖必要的主题,以使你可以做到这一点。 **复习你的课程材料,课堂笔记等,并尝试做这项工作**。 *如果*遇到*特定*问题,请彻底研究它,[在这里彻底搜索](/帮助/搜索),如果您仍然坚持发布代码和问题描述。人们会很乐意提供帮助。 –

回答

1

pipe(foo, bar, baz)(1, 2, 3)做到这一点:

  1. 它调用3个参数管道功能:富,酒吧和巴兹。这个函数返回一个值,这里可能是一个函数。
  2. 它调用此函数(由管道函数返回的一个)与3-参数:1,2和3

作业的其余部分是由你:)

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