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

    js学习

    自学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();}就失去了变量的灵活性。>

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <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>

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <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>  
  • 相关阅读:
    汇编语言
    离散数学:每条边的权重均不相同的带权图有唯一最小生成树
    android源码如何起步与阅读方法
    linux内核——会话、进程组、线程组
    ubuntu系统——增加磁盘空间
    Android系统源代码——所需工具
    android源码相关网站
    git——分布式版本控制系统
    linux内核——进程,轻量级进程,线程,线程组
    Android系统源代码学习步骤
  • 原文地址:https://www.cnblogs.com/yangheng/p/6065725.html
Copyright © 2011-2022 走看看