2014-10-10 3 views
0

여기가 예입니다.자바 스크립트, 다른 기능의 하위 항목으로 이동할 수 있습니까

function parentOne(){ 
     //do something 

     function ChildOne(){ 
     // do something 
     }; 
    }; 

    function parentTwo(){ 
     //how can I input data into ChildOne() from here? 
    }; 

버그를 수정하려고합니다. ParentTwo는 childOne에 도달 한 후에 만 ​​작동합니다. 그 이유는 childOne이 내 코드에서 히트 될 때 방향 API를 시작하기 때문입니다. 그런 다음 parentTwo를 사용하여 양식의 값을 to 또는 from 값으로 변경하면 제출할 수 있습니다. 좀 설명하기가 어렵지만 부모가 필요합니다. 사용자가 parentOne 함수를 먼저 수행하지 않으면 childOne을 초기화합니다.

나는 자바 스크립트를 알고 있지만 전에는이 기능을 사용 해본 적이 없으며, 나에게 어색한 것으로 보인다.

+0

음, 현재 작성된 방법은 불가능합니다. – epascarello

+0

'parentOne'은'parentTwo'가'ChildOne'에 접근하기 전에 호출되어야합니다. –

+0

parentOne은 onload 이벤트에서 호출됩니다. 어떻게하면 가능할 수 있을까요? 이 앱은 갈 준비가되어있는 것 같아요. 나는이 버그와 멈추는 배치를 만났습니다. – Christian4423

답변

1

함수 (ChildOne)를 생성하는 팩토리를 ParentOne이라고 부를 수 있습니다. 그러나 당신은 그것을 약간 재 작성해야 할 것입니다.

function parentOne(){ 
    //do something 

    return function ChildOne(){ 
    // do something 
    return 'x'; 
    }; 
}; 

function parentTwo(){ 
    //how can I input data into ChildOne() from here? 
    var a = parentOne(); 

    //You can call a() now. It runs the returned function which is ChildOne 
    var b = a(); 

    //b is now the result of ChildOne, which is 'x' 
}; 
+0

그레이트 솔루션! 이것은 내가 당신에게 감사 드려야 할 일을 끝냈다. – Christian4423

0

명백한 해결책은 parentOne에서 ChildOne을 반환하는 것입니다. 이것의 이점은 parentOne과 childOne을 사용하는 기존 코드가 변경 될 필요가 없다는 것입니다.

조건이 필요한 경우 ChildOne이 이미 호출되었는지 여부를 나타내는 변수를 저장할 수 있습니다.

var childOneCalled = false; 

function parentOne(){ 
    //do something 

    function ChildOne(){ 
    // do something 
    childOneCalled = true; 
    }; 

    return ChildOne(); 
}; 

function parentTwo(){ 
    if(!childOneCalled){ 
     parentOne()(); // call ChildOne 
    } 
}; 
+0

나는 당신의 솔루션을 사용했고 그것은 나를 위해 일했습니다! 충분한 인원이 있다면 나는 이것을 투표 할 것입니다. 감사합니다! – Christian4423

관련 문제