繁体   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