簡體   English   中英

將參數傳遞給回調函數:范圍問題

[英]Passing the parameters to a callback function : Scope issue

我在骨干應用程序的視圖中有這個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){
    ...
}

如何從sumeFunctionanotherFunction訪問anotherFunction

謝謝。

如果不確定: paramC是否可用- return thisView.anotherFunction(ans, thisView.paramC)

那么答案是-是的,該語句中有paramC

原因-此處定義的回調函數會記住創建它的環境。 這個想法類似於閉包。 在此處閱讀有關閉包和詞法范圍的信息

但是,如果您的問題是有關如何在anotherFunction方法的主體內部訪問paramC的,那么您可以按照第一個答案中的描述進行操作。 或者,您可以創建視圖對象的新屬性並為其分配paramC

最后一件事-javascript具有功能范圍。 您可以在此處閱讀有關javascript作用域的信息

希望能幫助到你。

試試這個

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);

有用的鏈接第一個鏈接 第二個鏈接

要公開內部函數和變量,您需要從第一個函數返回某些內容。 最好將它們包裝在return語句中。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM