`
ariyue
  • 浏览: 337592 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

如何向回调函数中传入其他参数

阅读更多


最近写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++动态库,执行回调函数并传递结构体参数

    c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。

    PHP回调函数与匿名函数实例详解

    回调函数:Callback (即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。 通俗的解释就是把函数作为参数传入进另一个函数中使用;PHP中有许多 ...

    看了就懂的Promise和回调函数

    也就是说回调函数是一个函数,作为 参数 传给另一个 JavaScript 函数,回调函数将会在这个函数执行完成后立即执行。回调函数是在传给的函数内部被调用执行的。 示例 // 回调函数 function callback(param) { ...

    理解javascript回调函数

    把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我...

    回调函数 – 灵活的函数指针

    而首先函数指针做为参数传入,而后根据该参数被调用的callback函数,称作回调函数 。 回调函数基本参数和分类 回调函数使用一般分为以下几个部分 回调函数 登记回调函数 触发回调事件 调用回调函数 响应回调事件 ...

    python在回调函数中获取返回值的方法

    python中有用到回调函数的时候,而回调函数又需要返回数值的时候,就需要先将所被传为回调函数的函数先赋值给一个变量,然后等回调结束之后,将这个变量取值回来就可以了。 如我用到到的调用xmlreader时,传入的一个...

    JavaScript中的回调函数实例讲解

    在JS中,函数可以作为参数传递给函数,不止可以传递值或者对象,案例如下: 定义: /** ... * @param nameCallback 传入回调函数 */ setName(nameCallback){ //弹出输入对话框 let name = promp

    ajax回调函数参数传递正确方法

    //name param 但是,上面是虽然是直接在函数签名中定义了参考,如果不是自己调用o.show(‘param’)时,而是通过其他函数回调传入时,就不一定好使了,因为别人在调用此方法时不一定给你传入此参,比如在使用ajax时

    PHP中call_user_func_array回调函数的用法示例

    把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 例子: function foobar($arg, $arg2) { echo __FUNCTION__, got $arg and $arg2\n; } class foo { function

    HTML+CSS+JS实战案例,新年快乐烟火特效

    这段代码是一个JavaScript对象S的初始化函数init。该函数的作用是初始化页面,并根据URL...然后,函数调用S.Drawing.loop函数,传入一个回调函数作为参数。这个回调函数中,调用S.Shape.render函数来渲染页面上的形状。

    浅谈javascript回调函数

    把函数作为参数传入到另一个函数中。这个函数就是所谓的回调函数 经常遇到这样一种情况,某个项目的A层和B层是由不同的人员协同完成.A层负责功能funA,B层负责funcB。当B层要用到某个模块的数据,于是他对A层人员说,我...

    javascript 封装的一个通用的Ajax function

    封装的一个通用的Ajax function 可以直接进行调用,需要传入的参数:回调函数,跳转的地址,需要传入的参数,method(get或post),失败后调用的函数 例如: var onerror = function() { alert("error"); } var ...

    jQuery实现ajax回调函数带入参数的方法示例

    本文实例讲述了jQuery实现ajax回调函数带入参数的方法。分享给大家供大家参考,具体如下: 不带参数的写法: function pass(htmlId,auditingFlag){ var url = 'ad_auditing.action'; var params = { 'adInfoPOJO...

    最简单的闹钟 js代码,包含代码注释

    在文件代码中,`setAlarm` 函数接受两个参数:`alarmTime` 是指定的闹钟时间,`callback` 是在闹钟时间到达时执行的回调函数。 `setAlarm` 函数首先获取当前时间(`now`),然后将 `alarmTime` 转换为一个 `Date` ...

    mobileSelect.js

    一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等.. 特性 原生js移动端选择控件,不依赖任何库 可传入普通数组或者json...

    C#委托所蕴含的函数指针概念详细解析

    设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。 回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用...

    dancersky#Blog#sqlite3数据库c语言简单操作基础(一)1

    第二个参数,sql语句,就是我们要执行的命令 第三个参数,回调函数 第四个参数,传入回调函数的参数 第五个参数,保存操作失败时的错误信息

    仅IE不支持setTimeout/setInterval函数的第三个以上参数

    即传了第三个参数,第三个参数将作为回调函数的参数obj传入。在非IE浏览器中都弹出了1。这样有个好处,即解决了回调函数的执行上下文,比如要调用某个对象的某个方法,即可以通过参数把该对象传进去。 代码如下: ...

    USB 摄像头开发包

    4、 启动摄像头,并传入回调函数地址;VidCapStart 5、 摄像头开始工作,获得数据后调用回调函数通知应用程序;VidCapCallbackProc 6、 停止摄像头;VidCapStop 7、 关闭摄像头;VidCapDisconnect 8、 释放资源。...

    自己制作的主框架系统(说明文档和联合测试项目)

    为了使程序更有灵活性,我使用了回调函数。现在我就简单得介绍一下回调函数。 首先,回调机制的技术基础是函数指针。函数指针就是带有参数的指针,只要它和一些函数的原型一致,它们就可以互相赋值。在此基础上我们...

Global site tag (gtag.js) - Google Analytics