2017-10-18 3 views
-6

자바 스크립트 문제가 발생했으며 몇 가지 질문이있었습니다. 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

스택 오버플로에 오신 것을 환영합니다! [둘러보기]를 둘러보고 [도움말], 특히 [* 좋은 질문을하는 방법 *] (/ help/how-to-ask)을 읽으십시오. 강사, 튜토리얼 또는 강좌에서 필요한 주제를 다룰 것입니다. ** 수업 자료, 수업 노트 등을 검토하고 과제를 수행하십시오 **. * * 특정 * 문제가 발생하면 [철저하게 여기에서 검색] (/ help/searching)을 철저히 조사하고 코드와 문제에 대한 설명을 게시하지 않은 경우 철저히 조사하십시오. 사람들이 기꺼이 도와 드리겠습니다. –

답변

1

pipe(foo, bar, baz)(1, 2, 3)를 호출하는 것과 것은이 수행합니다 foo는, 바, 바즈 :

  1. 는 3 개 매개 변수를 사용하여 파이프 함수를 호출합니다. 이 함수는 값 (여기서는 아마도 함수)을 반환합니다. 1, 2, 3

숙제의 나머지는 당신에게 달려 :)

0

괄호는 다음입니다 :

  • 는이 기능 3 개 매개 변수 (파이프 함수에 의해 반환 된 하나)를 호출 함수는 그 함수를 호출합니다. 괄호 안에 식별자 또는 리터럴 값 (쉼표로 구분 된 둘 이상)이 있으면 해당 값이 입력으로 함수에 전달됩니다. 따라서, 식의 첫 번째 부분 :

    pipe(foo, bar, baz) 
    

    단순히 호출이 경우, pipe를 호출하는 것입니다, foo, barbaz 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);