将参数传递给回调函数:范围问题

时间:2014-09-08 14:49:44

标签: javascript backbone.js scope

我在骨干应用的视图中有这个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){
    ...
}

如何从sumeFunction访问paramC到anotherFunction

感谢。 !

3 个答案:

答案 0 :(得分:1)

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

然后回答是 - 是的,paramC在该陈述中可用。

原因 - 此处定义的回调函数会记住创建它的环境。这个想法类似于封闭。阅读关闭和词汇范围here

但是,如果您的问题是关于如何在paramC方法的正文中访问anotherFunction,那么您可以执行第一个答案中所述的操作。或者,您可以创建视图对象的新属性并为其指定paramC

最后一件事--javascript具有功能范围。您可以阅读有关javascript范围here的信息。

希望它有所帮助。

答案 1 :(得分: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

答案 2 :(得分:-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);
}