javascript回调函数和参数

Par*_*der 13 javascript callback javascript-events

我想要类似于此的东西.

function AjaxService()
{

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

 function CallBack(res) {
        call_back(res);
    }  
}
Run Code Online (Sandbox Code Playgroud)

所以我的通话程序将是这样的

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

function success(res)
{


}
Run Code Online (Sandbox Code Playgroud)

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

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

function success(res,val1, val2)
{


}
Run Code Online (Sandbox Code Playgroud)

帮助将被鼓舞.

关心Parminder

sle*_*man 22

使用闭包和函数工厂:

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

你在这里传递的不是generateSuccess函数,而是返回的匿名函数generateSuccess看起来像是期望的回调Remove.val1并在返回的匿名函数val2中传递generateSuccess并由闭包捕获.

更清楚的是,这就是发生的事情:

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

或者如果您更喜欢内联:

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

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

  • 在javascript中执行此操作的方法较为简单,您不觉得吗? (2认同)
  • @ harshath.jr这没什么大不了的.这是非常标准的JavaScript (2认同)

Xin*_*nus 8

您可以将其作为匿名函数指针传递

xx.Remove(1,function(){
                           //function call will go here
                           success(res,val1, val2);
                      });
Run Code Online (Sandbox Code Playgroud)

  • 应该是:`xx.Remove(1,function(res){success(res,val1,val2)});` (7认同)