2014-09-08 2 views
0

백본 응용 프로그램보기에 someFunction이 있습니다. 이제이 함수에 정의 된 매개 변수를 jConform 함수의 콜백 함수에 보내려고합니다. 그런 경우 범위가 어떻게 작동하는지 알 수 없습니다.매개 변수를 콜백 함수에 전달 : 범위 문제

someFunction: function() { 
    var thisView = this, 
     paramA = 10, 
     paramB = $(ev.currentTarget).data("id"), 
     paramC = this.getConfig(paramB); 

    jConfirm(paramC.jConfirmMessage, "Confirm Deactivation", function (ans) { 
         return thisView.anotherFunction(ans, paramC); 
        }); 
} 


anotherFunction: function(ans, paramC){ 
    ... 
} 

어떻게 anotherFunctionsumeFunction에서 paramC 액세스 할 수 있습니까?

감사합니다. !

+0

'paramC'는 'someFunction' 외부에서 정의해야하며, 그렇지 않으면 변수를 전달하는 someFunction'에서 anotherFunction'을 호출해야합니다. –

+0

/how/when anotherFunction은 언제 호출됩니까? –

+0

@FelixKling 죄송합니다. 내 실수. 업데이트 됨. –

답변

1

당신이 확실하지 않은 경우에 대한 : paramC가에서 사용할 수있는 경우 - return thisView.anotherFunction(ans, thisView.paramC).

그러면 대답은 - 예, 해당 진술에서 paramC을 사용할 수 있습니다.

이유 - 여기서 정의 된 콜백 함수는 해당 콜백 함수가 작성된 환경을 기억합니다. 이 아이디어는 종결과 유사합니다. 종결 및 어휘 범위에 대해 알아보기 here

anotherFunction 방법의 본체 내부에있는 paramC에 액세스하는 방법에 대한 질문은 첫 번째 대답에 설명 된대로 수행 할 수 있습니다. 또는 뷰 객체의 새 속성을 만들고 paramC을 할당 할 수 있습니다.

그리고 마지막으로 한 가지 - 자바 스크립트의 기능 범위가 있습니다. 자바 스크립트 범위 here에 대해 읽을 수 있습니다.

희망이 있습니다.

0

는 당신이 첫 번째 함수에서 뭔가를 반환해야 내부 함수와 변수를 노출하기 위해이 방법을

someFunction: function() { 
//private 
    var that = this; 
    jConfirm(paramC.jConfirmMessage, "Confirm Deactivation", function (ans) { 
         return thisView.deactivateConfirm(ans, paramC); 
        }); 
    return { 
//public 
     thisView : that, 
     paramA : 10, 
     paramB : $(ev.currentTarget).data("id"), 
     paramC : that.getConfig(paramB) 
    }; 
} 

anotherFunction: function(ans, paramC){ 
    //use it here 
} 

anotherFunction(ans, someFunction.paramC); 

유용한 링크 first link second link

+1

설명이없는 코드는 거의 도움이되지 않습니다. –

-1

을보십시오. 당신이 반환 진술에 그것들을 감싸는 것이 좋다.

someFunction: function() { 
    var thisView = this; 

    thisView.paramA = 10; 
    thisView.paramB = $(ev.currentTarget).data("id"); 
    thisView.paramC = this.getConfig(paramB); 

    return { 
     paramA : thisView.paramA, 
     paramB : thisView.paramB, 
     paramC : thisView.paramC, 
     jConfirm: function(thisView.paramC.jConfirmMessage, "Confirm Deactivation", function (ans)) { 
         return thisView.anotherFunction(ans, thisView.paramC) 
     } 
    }  
} 


anotherFunction: function(ans, paramC){ 
    console.log(someFunction.paramC); 
} 
+0

설명이없는 코드는 거의 도움이되지 않습니다. –

+0

포인터에 대한 @FelixKling 주셔서 감사합니다. – AhmadAssaf

관련 문제