2017-02-19 1 views
0

저는 최근에 자바 스크립트에서 함수 표현식과 선언문을 읽었으며 이에 대한 많은 온라인 기사를 참조했습니다. 나는 또한 SO에 관한이 주제에 관한 토론을 많이 보았다. 학습 과정에서 나는 분명히 설명 할 수없는 도전 과제를 스스로에게 맡겼다. 여기에서 약간의 통찰력을 얻을 수 있도록 SO 전문가에게 친절하게 요청할 수 있습니까? 여기 자바 스크립트 함수 표현식 사용 사례

이 문제 시나리오 -

시나리오 1 :이 시나리오를 이해

>var multFunc=function(n){var a=2; return n*a;} 
    >multFunc(6)  
    12 

내가 (12)를 기대하고 있었다 어떤 결과입니다.

시나리오 2 :

>var multFunc1=function(n){return function(n){n*2}} 
>multFunc1(6) 
function (n){n*2} 

나는 두 번째 경우를 이해하지 못했다. 왜 12를 돌려주지 않을까요? 누군가 이해해 주실 수 있습니까? , Javascript Function Expressions이 링크 JavaScript Nested function 을하고 나 또한 어제 비슷한 질문을했지만 나는 (TJ로 우아하게 설명 된 바와 같이) 나는 완전히 개념을 파악하지 않은 추측 - - 나는이 링크를 체크 한 Trying a closure the wrong way?

+3

'multFunc1'은 함수를 반환하므로'12'를 얻기 위해서는'multFunc1() (6)'을해야합니다. – 4castle

+0

@ 4castle이 말한 것에 더하여,'multFunc1'에 전달 된 인수는 사용되지 않고 * 표시된 내부 함수는 항상'undefined' *를 반환합니다 ('return' 문이 없기 때문에). – nnnnnn

+0

@ 4castle .. multFunc1() (6) 호출은 실제로 undefined를 반환합니다. 나는 실제로 그것을 이미 시도했다. –

답변

1

두 번째 시나리오에서 본질적으로 여기서하는 일은 Object 함수를 반환하는 것입니다. 함수 실행 결과 (대개 12 일 것입니다)를 반환하는 대신 참조를 해당 객체에 반환합니다.

업데이트 : 두 번째 기능에는 return 문이 누락되었습니다. 이렇게함으로써, 이것은 당신이 찾고 있다고 믿는 결과를 가져옵니다.

var multFunc1=function(n){ 
    return function(n){ return n*2} 
} 

// The first set of() require no argument as 
// they are never used withing the second function. 
multFunc1()(6); 
+1

'maltFunct1() (6)'은'undefined'를 리턴합니다. (내부 함수는 항상'undefined'를 반환합니다.) – nnnnnn

+0

내 잘못, 그것을 지적 해 주셔서 감사합니다. 나는 완전히 간과했다. .. –

+0

두 번째 경우에, 반환 된 funtion 객체에 대한 참조 인 경우 매개 변수를 사용하여 참조 자체에서 함수를 호출 할 수 있습니까? –

2

코드를 :

var multFunc1=function(n){return function(n){n*2}} 

은 함수를 반환합니다. 그래서 multFunc1이 경우, 반환 된 기능을 나타냅니다

function(n){n*2} 

그래서 당신이 같은 전화를했다 : 그러니까 기본적으로 반환 된 기능은 n (전달 된 인수의 값을 기억

multFunc1(1)(2) 

, 나는 당신을 추천합니다 폐쇄에 대해 읽으십시오).

var multFunc1=function(n){return function(x){n*x}} 
var multBy2 = multFunc1(2) 
var multBy16 = multFunc1(16) 

multBy2(4) // 8 
multBy16(2) // 32 

사이드 노트 : 그래서 우리는 같은 통화를 다시 쓸 수 항상 undefined을 반환 있도록 @nnnnnn 댓글에서 지적했듯이 내부 기능 · multFunc1의는 어떤 return 문이없는

+1

표시된 내부 함수는 항상 '정의되지 않음'을 리턴한다. – nnnnnn

+0

@ Ant 님이 답변 해 주셔서 감사합니다.하지만이 답변에 대해 확신합니까? 우선이 호출 - multFunc1 (1) (2)는 undefined를 반환합니다. 그리고 만약 내가 이렇게하면 - var multFunc1 = function (n) {return function (n) {n * 2}} 그리고 나서 var multBy2 = multFunc1 (2); multBy2 (4) 호출은 undefined를 반환합니다. –

+0

@ShibasisSengupta : 내 대답을 완전히 확인하십시오. 당신은'return' 문을 놓쳤습니다. 이유가'undefined'가되었습니다. –

관련 문제