javascript回调函数和参数 [英] javascript callback function and parameters

查看:108
本文介绍了javascript回调函数和参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要类似的东西。

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

function success(res)
{


}

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

  var xx = new AjaxService 
//如何用这些参数调用成功函数
//xx.Remove(1,success(22,33));

function success(res,val1,val2)
{


}

帮助将被缓解。



尊重
Parminder

解决方案

一个函数工厂:

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

这里传递的不是 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);

或者如果您喜欢内联:

  xx.Remove(1,(function(var1,var2){
return function(res){
//这是你的成功函数
}
})(val1,val2));

不可读,但保存您命名工厂函数。如果你不是在循环中这样做,那么Xinus的解决方案也会比我的内联版本更好和更简单。但是请注意,在循环中,您需要双重关闭机制来断开从当前范围中的变量传递到回调函数的变量。


I want to something similar to this.

function AjaxService()
{

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

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

so my calling program will be like this

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

function success(res)
{


}

Also if I want to add more parameters to success function how will I achive it. Say If i have success function like this

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

function success(res,val1, val2)
{


}

Help will be appretiated.

Regards Parminder

解决方案

Use a closure and a function factory:

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

What you're passing here is not the generateSuccess function but the anonymous function returned by generateSuccess that looks like the callback expected by Remove. val1 and val2 are passed into generateSuccess and captured by a closure in the returned anonymous function.

To be more clear, this is what's happening:

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

Or if you prefer to do it inline:

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

not as readable but saves you from naming the factory function. If you're not doing this in a loop then Xinus's solution would also be fine and simpler than my inline version. But be aware that in a loop you need the double closure mechanism to disconnect the variable passed into the callback function from the variable in the current scope.

这篇关于javascript回调函数和参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆