2017-04-11 3 views
0

:나는이 두 통화와 기능 작동하게하기 위해 노력하고있어

내가 할 노력하고있어
func(1)(2); // 3 
func(1, 2); // 3; 

:

function func(x, y) { 
    return (function(y) { 
    return x + y; 
    }(y)); 
} 

하지만이 순서대로 호출하려고하면 전혀 작동하지 않습니다. 그것을 성취 할 다른 방법이 있습니까?

function add(x, y) { 
    if (y) return x + y; 
    return function(y) { 
    return x + y; 
    }; 
} 

이것은 효과가 있지만 더 좋은 해결책이라고 생각합니다.

감사합니다.

+1

가능 [합계 (2,3) 및 합계 (2) (3)]에 대한 출력이 5가되는 함수를 작성하는 방법의 복제본] (http://stackoverflow.com/questions/42952425/how- 쓰기 기능 2-sum-sum-for-sum2-for-the-sum23-wil) –

답변

0

당신이 찾고있는 것을 currying이라고하는데 여기에 그 방법이 있습니다.

function add(a, b){ 
 
\t if(typeof b !== 'undefined'){ 
 
\t \t return a + b; \t \t 
 
\t }else{ 
 
\t \t return function(c){ 
 
\t \t \t return a + c; 
 
\t \t } 
 
\t } 
 
\t 
 
\t 
 
} 
 

 

 
console.log(add(2, 3)); 
 

 
console.log(add(2)(3));

또한이 원하는 경우 IMO, 당신은 단지 그것을 래퍼 그 currify에, 함수 func(1, 2)을 가지고, 그렇게 좋은 이유없는이 답변 How to Write a function where the output for both “sum(2,3)” and “sum(2)(3)” will be 5

0

을 확인 curry을 사용하는 경우 lodash을 사용하는 경우 var curried = _.curry(function)으로 함수를 카레하면 함수가 깨끗해집니다.

관련 문제