Javascript 回调函数和参数

标签 javascript callback dom-events

<分区>

我想要类似这样的东西:

function AjaxService()
{

 this.Remove = function (id, call_back)
 {
    myWebService.Remove(id, CallBack)
 }

 function CallBack(res) {
        call_back(res);
    }  
}

所以我的调用程序将是这样的:

var xx  = new AjaxService();
xx.Remove(1,success);

function success(res)
{


}

此外,如果我想向成功函数添加更多参数,我将如何实现它。 说如果我有这样的成功功能:

var xx  = new AjaxService();
//how to call back success function with these parameters
//xx.Remove(1,success(22,33));

function success(res,val1, val2)
{


}

帮助将不胜感激。

最佳答案

使用闭包和函数工厂:

function generateSuccess (var1,var2) {
    return function (res) {
        // use res, var1 and var2 in here
    }
}
xx.Remove(1,generateSuccess(val1,val2));

您在这里传递的不是 generateSuccess 函数,而是 generateSuccess 返回的匿名函数,它看起来像 Remove 预期的回调. val1val2 被传递到 generateSuccess 并被返回的匿名函数中的闭包捕获。

更清楚地说,这就是正在发生的事情:

function generateSuccess (var1,var2) {
    return function (res) {
        // use res, var1 and var2 in here
    }
}
var success = generateSuccess(val1,val2);
xx.Remove(1,success);

或者如果您更喜欢内联:

xx.Remove(1,(function(var1,var2) {
    return function (res) {
        // this is your success function
    }
})(val1,val2));

可读性差,但可以避免命名工厂函数。如果您不是在循环中执行此操作,那么 Xinus 的解决方案也比我的内联版本更简单。但请注意,在循环中,您需要双闭包机制来断开传递给回调函数的变量与当前作用域中的变量。

关于Javascript 回调函数和参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1997531/

相关文章:

javascript - 使用 addEventListener 添加的火灾更改事件

java - GWT 中的文档就绪事件解决方案

javascript - jQuery 在页面呈现后更改元素

javascript - 如何显示数组中的随机项目?

java - 带有回调的方法中的操作顺序不正确

Javascript : event is not calling submitted bind(. .)-回调副本:-/

javascript - 什么是 Form.onsubmit()?

javascript - 停止网页滚动

javascript - livequeries 不会使用 paresplattform 更新我的值

c# - Action 字典期望其键的类型