2013-08-07 2 views
-2

오류 대신 x + y + z에 대한 값을 반환하도록하려면 어떻게해야합니까?함수는 함수를 반환하는 함수를 반환합니다. javascript

function A (x) { 
    return function B (y) { 
     return function(z) { 
      return x+y+z; 
     } 
    } 
}; 

var outer = new A(4); 
var inner = new outer(B(9)); 
inner(4); 
+0

코드가 정상적으로 작동합니다. 달성하고자하는 것은 무엇입니까? 네가 묻고있는 것이 불분명하다. –

+1

"new (새)"는 여기에 필요 없습니다. 당신은'A (2) (3) (4)'또는'var f = A (2); var g = f (3); 경고 (g (4));', 꽤 많이 똑같습니다. – yent

+0

yent.. 큰 대답을 고맙습니다. 대답 해주세요. 제프 ... 아니, 일하지 않았어, 그걸 시도 했니? "B in undefined". rid .... 그것의 반환 x + y + z. 개념의 증명. – mike628

답변

2

"신품"이 필요하지 않습니다. "new"는 인스턴스를 반환합니다. 귀하의 질문에 지금

function foo(a){ 
    return a; 
} 

foo(4); // this will return 4, but 
new foo(); // this will return a 'foo' object 

을하지만 :

는 예를 들어 (말장난 의도). 제거한 것처럼 B는 함수 A의 범위 내에서 선언됩니다. 따라서 B는 호출 한 범위에 존재하지 않으므로 new outer(B(9));이 오류를 발생시킵니다.

두 번째로, 멘토가 말한 것. 각 함수는 함수를 반환하기 때문에 반환 된 함수를 호출합니다.

A(2)(3)(4); 
// each recursive '(x)' is attempting to call the value in front of it as if it was a function (and in this case they are). 

일종의 설명하기 :

function A (x) { 
    return function B (y) { 
     return function C (z) { 
      return x+y+z; 
     } 
    } 
}; 

var f = A(2); // f is now function B, with x = 2 
var g = f(3); // g is now function C, with x = 2, and y = 3 
var h = g(4); // Function C returns x+y+z, so h = 2 + 3 + 4 = 9 

그러나, 우리는 다음과 같은 '바로 가기'를 사용할 수 있습니다

A(2)(3)(4) = (A(2)(3))(4) = ((A(2))(3))(4); 

// A(2) returns a function that we assigned to f, so 
((A(2))(3))(4) = ((f)(3))(4) = (f(3))(4); 

// We also know that f(3) returns a function that we assigned to g, so 
(f(3))(4) = g(4); 

을 내가 도움이되기를 바랍니다!

관련 문제