2014-05-25 5 views
1

이 코드에서 일어나는 일을 이해하기를 원합니다. 중첩 된 함수와 상위 순서, return 문에 대해 자세히 살펴 보았습니다. 그러나 여전히 나는이 의심에 종지부를 찍기를 원했고 (두 행에 대한 답신이 확실하지 않음), 여기서 나를 이끌어 주었고, 나의 이해와 적용되는 모든 것에 도움이 필요하다.잡히지 않은 TypeError : 숫자가 함수가 아닙니다.

function higher_order(){ 
    return function addNum() 
    { 
    return 1+1; 
    return function subNum() 
    { 
     return 1-1; 
    }; 
    }; 
}; 
alert(higher_order()()()); 
+1

이렇게 두 번의 리턴을 볼 때마다 함수가 1 + 1을 반환하면 더 조심스럽게 생각해보십시오. 어떻게 함수를 반환해야할까요? – adeneo

답변

1

//이 방법으로 시도 :

function higher_order(){ 
    return function addNum(){ 
     return function subNum(){ 
      return 1-1; 
     }; 
    }; 
}; 

higher_order() 함수 ADDNUM를 반환 //을

higher_order()() 함수 subNum를 반환 //

higher_order()()() // subNum (0)에서 반환 된 값을 반환합니다.

5

문제는 함수가 첫 번째 return 문 다음에 실행을 중지한다는 것입니다. higher_order은 숫자 2를 리턴하는 함수 addNum을 리턴합니다. ()

  • higher_order() 반환 따라서는 예외가, addNum()
  • addNum()가 2 번
  • 2 (higher_order()()가) 함수로 호출하지 반환 기능이 호출하지 않고, 예외가 3 괄호 발생 .

alert(higher_order()()) 세 번째 호출에 사용 된 값을 확인하십시오.

관련 문제