最近写JS经常会因为向回调函数中传参而头疼,今天总结一下向回调函数中传参的方法,以后的应用中就不用在到处去找了。
首先构建一个需要向回调函数中传入参数的典型应用。在一个页面中产生了一系列的向Ajax Proxy的请求,传入的是一个ID,根据ID返回了不同的内容值,我们需要把这些内容打印在页面上,同时给页面元素赋予ID,这个时候就需要向回调函数中传入ID,以产生带ID的页面元素。
第一种方法就是使用全局变量,能够被函数和回调函数同时访问。这种方法虽然不够优雅,但是确实能够完成任务。
这种方法在传入单个的变量时没什么问题,但是当我们在一个循环的结构中,不断的传入变量到回调函数,这个时候传入的变量会采用最后一次传入的变量值,这就与我们预想的结果有了出入。
第二种办法是使用Closure,这种方法更加优雅一些。通过使用Closure,我们通过匿名函数来重新包装返回的对象,同时将需要传入的参数做为新的属性传给回调函数。
第三种方法假设你需要为你的回调函数使用不同的签名,例如Ajax.Net的专家们允许你在回调中使用额外的参数,如果你想从一个换到另外一个并且保持兼容性的话,就要用到下面的写法:
第四种办法其实就是Closure的一种变体,你不需要显示的声明一个回调函数,而是使用一个匿名函数直接进行你所需要的处理。
如何向回调函数中传参数
总结一下:向回调函数中传入参数的终极办法其实就是利用Closure,这个看来是唯一可行而且比较优雅的方法,下面将Closure的写法列在下面:
var callback = {
success:function(data){
var item = document.createElement("li");
item.id = data.id;
item.innerHTML = "The id is : " + data.id;
item.innerHTML += " The value is : " + data.value;
var parent = document.getElementById("result");
parent.appendChild(item);
},
failure:function(){
alert('failure:');
}
}
xhr = new QueuedHandler();
for(var i=0;i<20;i++){
xhr.request('get','ajaxproxy.php?id='+i,function(data){ //第二种办法:利用Closure
data = eval('(' + data + ')');
data.id = i;
callback.success(data);
});
}
分享到:
相关推荐
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
回调函数:Callback (即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。 通俗的解释就是把函数作为参数传入进另一个函数中使用;PHP中有许多 ...
也就是说回调函数是一个函数,作为 参数 传给另一个 JavaScript 函数,回调函数将会在这个函数执行完成后立即执行。回调函数是在传给的函数内部被调用执行的。 示例 // 回调函数 function callback(param) { ...
把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我...
而首先函数指针做为参数传入,而后根据该参数被调用的callback函数,称作回调函数 。 回调函数基本参数和分类 回调函数使用一般分为以下几个部分 回调函数 登记回调函数 触发回调事件 调用回调函数 响应回调事件 ...
python中有用到回调函数的时候,而回调函数又需要返回数值的时候,就需要先将所被传为回调函数的函数先赋值给一个变量,然后等回调结束之后,将这个变量取值回来就可以了。 如我用到到的调用xmlreader时,传入的一个...
在JS中,函数可以作为参数传递给函数,不止可以传递值或者对象,案例如下: 定义: /** ... * @param nameCallback 传入回调函数 */ setName(nameCallback){ //弹出输入对话框 let name = promp
//name param 但是,上面是虽然是直接在函数签名中定义了参考,如果不是自己调用o.show(‘param’)时,而是通过其他函数回调传入时,就不一定好使了,因为别人在调用此方法时不一定给你传入此参,比如在使用ajax时
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 例子: function foobar($arg, $arg2) { echo __FUNCTION__, got $arg and $arg2\n; } class foo { function
这段代码是一个JavaScript对象S的初始化函数init。该函数的作用是初始化页面,并根据URL...然后,函数调用S.Drawing.loop函数,传入一个回调函数作为参数。这个回调函数中,调用S.Shape.render函数来渲染页面上的形状。
把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我...
封装的一个通用的Ajax function 可以直接进行调用,需要传入的参数:回调函数,跳转的地址,需要传入的参数,method(get或post),失败后调用的函数 例如: var onerror = function() { alert("error"); } var ...
本文实例讲述了jQuery实现ajax回调函数带入参数的方法。分享给大家供大家参考,具体如下: 不带参数的写法: function pass(htmlId,auditingFlag){ var url = 'ad_auditing.action'; var params = { 'adInfoPOJO...
在文件代码中,`setAlarm` 函数接受两个参数:`alarmTime` 是指定的闹钟时间,`callback` 是在闹钟时间到达时执行的回调函数。 `setAlarm` 函数首先获取当前时间(`now`),然后将 `alarmTime` 转换为一个 `Date` ...
一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等.. 特性 原生js移动端选择控件,不依赖任何库 可传入普通数组或者json...
设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。 回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用...
第二个参数,sql语句,就是我们要执行的命令 第三个参数,回调函数 第四个参数,传入回调函数的参数 第五个参数,保存操作失败时的错误信息
即传了第三个参数,第三个参数将作为回调函数的参数obj传入。在非IE浏览器中都弹出了1。这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去。 代码如下: ...
4、 启动摄像头,并传入回调函数地址;VidCapStart 5、 摄像头开始工作,获得数据后调用回调函数通知应用程序;VidCapCallbackProc 6、 停止摄像头;VidCapStop 7、 关闭摄像头;VidCapDisconnect 8、 释放资源。...
为了使程序更有灵活性,我使用了回调函数。现在我就简单得介绍一下回调函数。 首先,回调机制的技术基础是函数指针。函数指针就是带有参数的指针,只要它和一些函数的原型一致,它们就可以互相赋值。在此基础上我们...