2014-09-24 2 views
0

JS에 익숙하지 않고 배우려고합니다. spec에는 다음이 필요합니다. 다른 함수 *를 인수로 취하여 한 번만 호출 할 수있는 함수 버전을 만듭니다. 수정 된 함수에 대한 반복 호출은 아무 효과가 없으므로 원래 호출의 값을 반환합니다. 클로저를 사용하지 않고 어떻게이 작업을 수행 할 수 있습니까? 심지어 가능할까요? 이걸 어떻게 닫을 수 있니? * 참고 :이 원본 입력 함수에는 매개 변수가 없어야합니다.Javascript에서 간단한 클로저를 실행할 때 런타임 오류가 발생했습니다.

난에서 "예기치 않은 토큰 {"오류 받고 있어요
var divide = function() { 
var x = 2; 
var y = 6; 

return y/x; 
} 

var mainFunc = function (func) { 
return func(){ 
    return y/x + 1; 
} 
} 

var output = mainFunc(divide); 
console.log(divide()); 
console.log(output()); 
console.log(output()); 

"반환 FUNC를() {"나는 확실히 이해하지 못하는 내가 잘못 뭘하는지 :

이 내가 가진 무엇인가? 사양에 따라 divide()를 mainFunc()에 전달하고이를 reference 변수 출력으로 설정합니다. 그런 다음 divide() 및 output()을 여러 번 호출하여 클로저가 작동하고 수정 된 함수가 한 번만 발생하는지 테스트합니다. 나는 무엇을 놓치거나 이해하지 못합니까?

도움 주셔서 감사합니다. 여기

+0

반환 FUNC를 (반환 결과는 "자체 포함 된 라이브러리") {// 이것은이다 구문 오류 및 {여기서 예기치 않은 토큰입니다. –

+0

구문 오류는 어떻게됩니까? 나는 mainFunc()에 divide()를 전달하므로 func()가 divide 속성을 가져야한다. – rahul2001

+0

아마 * 달성하고자하는 것을 설명하면 도움이 될 것입니다. 말로 표현하자면 코드가 아닙니다. –

답변

0

당신이 이동 :

function runonce(func) { 
    return (function(func) { 
    var ran = false; 
    var retval; 
    return function() { 
     if (!ran) { 
     ran = true; 
     retval = func(); 
     } 
     return retval; 
    } 
    })(func); 
} 

function realfunction() { 
    console.log('really running'); 
    return 5; 
} 

var realfunctionrunner = runonce(realfunction); 
realfunctionrunner(); 
realfunctionrunner(); 
realfunctionrunner(); 

연구 코드, 전체 트릭하여 runonce 함수에서