2017-10-18 96 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);