zoukankan      html  css  js  c++  java
  • js回调函数(callback)理解

    Mark!

    js学习

    不喜欢js,但是喜欢jquery,不解释。

    自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗。迅速google之,发现原来中文翻译成回调。也就是回调函数了。不懂啊,于是在google回调函数,发现网上的中文解释实在是太“深奥”了,我承认自己才疏学浅了。看了几个回调的例子后,貌似有点理解了。下面是我对回调函数的理解,要是理解错了,请指正,不甚感激。

            首先还是从jquery网站上的英文定义入手,身为国人,我真感到悲剧。一个回调的定义被国内的“高手”解释成什么样,就在那绕圈子,貌似只有把你绕进去了,他才算高手。浮云,一切都是浮云。

    A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.

    这是js里的解释了,其他语言的算我没说。

    字面上理解下来就是,回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。

    其实中文也很好理解:回调,回调,就是回头调用的意思。函数a的事先干完,回头再调用函数b。

    举个现实的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。”对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。

    其实这就是一个回调的过程。你留了个函数b(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是函数a。她必须先回到家以后,函数a的内容执行完了,再执行函数b,然后你就收到一条信息了。

    这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。

     也许有人有疑问了:一定要以参数形式传过去吗,我不可以直接在函数a里面调用函数b吗?确实可以。求解中。

    <解惑:如果你直接在函数a里调用的话,那么这个回调函数就被限制死了。但是使用函数做参数就有下面的好处:当你a(b)的时候函数b就成了回调函数,而你还可以a(c)这个时候,函数c就成了回调函数。如果你写成了function a(){...;b();}就失去了变量的灵活性。>

    下面用代码来证实我的理解。

    <html> 
     
    <head> 
     
    <title>回调函数(callback)</title> 
    <script language="javascript" type="text/javascript"> 
    function a(callback) 
    {    
        alert("我是parent函数a!"); 
        alert("调用回调函数"); 
        callback(); 
    } 
    function b(){ 
    alert("我是回调函数b"); 
     
    } 
    function c(){ 
    alert("我是回调函数c"); 
     
    } 
     
    function test() 
    { 
        a(b); 
       a(c); 
    } 
     
    </script> 
    </head> 
     
    <body> 
    <h1>学习js回调函数</h1> 
    <button onClick=test()>click me</button> 
    <p>应该能看到调用了两个回调函数</p> 
    </body> 
     
    </html> 
    

    转载:http://luxiao1223.blog.51cto.com/2369118/482885

    针对javascript回调函数传参数的简单实例

    问题:

    现在有函数如下定义:
    function A(a,callback){
    ....
    }
    function B(){
    ....
    }
    则可以有如下调用
    A(a,B);来实现回调。


    现在我希望传给B一个参数c,即实现类似于:

    A(a,B(c));的效果,各位高手帮帮忙,应该如何实现?

    解答:

      1. <html> 
      2. <head> 
      3. <title> 
      4. jsp3 
      5. </title> 
      6. </head> 
      7. <body bgcolor="#ffffff"> 
      8. <script language="javascript" type="text/javascript"> 
      9. function A(a,callback){ 
      10. var b=callback; 
      11. alert(a+b); 
      12. function B(c){ 
      13. return (-c); 
      14. </script> 
      15. <form method="post" action="jsp3.jsp"> 
      16. <br><br> 
      17. <input type="button" name="Submit" value="Submit" onclick="A(4,B(3));"> 
      18. </form> 
      19. </body> 
      20. </html>

    转载于:http://blog.sina.com.cn/s/blog_4bb52a160100da4w.html

    <span style="font-size:14px;">我包装了jQuery的ajax方法
    function doAjax(u,param,callback){
          $.ajax({
                type:'POST',
                url:u,
                data:param,
                success:callback
          });
    }
    
    function showAlert(data){
         alert(data);
    }
    
    比如这样调用 doAjax("server.php","id=12&type=1",showAlert);
    $.ajax 在success后,会返回一个data到showAlert中,显示出来 ,没有问题.
    可是,当我想多传一个参数给showAlert时怎么写?
    写成doAjax("server.php","id=12&type=1",showAlert("hi",data))、或者把上面的success:callback 写成success:callback(msg,data)显然都不行,如之奈何?求助~~~</span>
    

      

    <span style="font-size:14px;color:#333333;">简单,很多方法都定义了回调函数,回调函数也是函数,就是说不管怎么传,只需要是个函数类型即可。写法如下。
    方式1,
    doAjax(参数1,参数2,function(request,opts){
             callback(request,opts,agrs);
     });
    function callback(request,opts,args){
                  
    };
    方式2,
    var args=N;
    doAjax(参数1,参数2,function(request,opts){
           var X=N;
           回调函数代码块..
           和以上几乎一样,看个人编码方式选择。      
    });</span>
    

      

    越不想学什么,越就被什么所折磨。看看javascript回调吧。 直接上码吧。。

      1.  
      2. <</span>html>   
      3.       
      4.    <</span>head>   
      5.       
      6.    <</span>title>回调函数(callback)</</span>title>   
      7.    <</span>script language="javascript" type="text/javascript">   
      8.   
      9. function a(callback){  
      10.     alert("我来自父函数a");  
      11.       
      12.     callback();  
      13.   
      14. }  
      15. function b(){  
      16.     alert("我来自子(回调)函数 b");  
      17.   
      18. }  
      19.   
      20. function c(){  
      21.     alert("我来自子(回调)函数 c");  
      22.     }  
      23.       
      24.       
      25.     function test(){  
      26.       
      27.         a(b);  
      28.           
      29.         a(c);  
      30.     }  
      31.       
      32. //--------------------下面2个函数简单演示了从父函数传递给回调函数----------    
      33.       
      34. //Callback 就是一个参数名 这个参数代表的是一个函数 暂且不要管这个函数有没有参数   
      35. //  。。。 应该还有其他写法吧?   
      36. function e(m,n,Callback){  
      37.     var d = m+n;  
      38.     alert("一个从父函数e 产生的参数将要被传递给回调函数 ,这个参数是:"+d);  
      39.       
      40.     //这里才写你想调用的函数---参数要正确  
      41.     Callback(d);  
      42. //-----------  
      43. }//     |  
      44. //      |   
      45. function callback(data){  
      46.   
      47.         alert("我是回调函数,我的名字叫:callback ,我接收到来自父函数的参数,参数是:"+data);  
      48.   
      49. }  
      50.   
      51.   
      52. </</span>script>  
      53. </</span>head>  
      54.   
      55. <</span>body>  
      56.     <</span>h2>a CallBack is a function that is passed as an argument to another function and is executed after its parent function has completed;</</span>h2>   
      57.     <</span>hr />  
      58.     <</span>a href="#" onclick="javascript:test();">不传递参数的Callback</</span>a><</span>br />  
      59.     <</span>br />  
      60.     <</span>br />  
      61.     <</span>br />  
      62.     <</span>a href="#" onclick="javascript:e(7,8,callback);">传递参数的Callback</</span>a>  
      63.     <</span>hr />  
      64.     </</span>body>  
      65.       
      66.     </</span>html>  

    转载于:http://blog.sina.com.cn/s/blog_601b97ee0101f1rc.html

  • 相关阅读:
    Apache Commons CLI命令行启动
    《三体1——地球往事》—— 读后总结
    《鬼谷子的局4》 —— 读后总结
    Microsoft Visual C++ 2017 Redistributable
    Navicat Premium 12安装与激活(亲测已成功激活)
    如何从DOS命令窗口进行复制粘贴
    使用java写js中类似setTimeout的代码
    Spring @RestController、@Controller区别
    SpringBoot整合Swagger2
    git clone 报“The project you were looking for could not be found.”
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/5217820.html
Copyright © 2011-2022 走看看