我收到了以下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 :(得分:1)
pipe(foo, bar, baz)(1, 2, 3)
这样做:
其余的功课取决于你:)
答案 1 :(得分:0)
函数调用该函数后的括号。如果括号内有标识符或文字值(多个用逗号分隔),则这些值作为输入传递给函数。所以,表达式的第一部分:
pipe(foo, bar, baz)
只是调用pipe
,在这种情况下,foo
,bar
和baz
是对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);