js回调函数(callback)理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于js回调函数(callback)理解的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中回调函数callback(转载),说的很清楚,看一遍就理解了

vb 回调函数 详解

深入理解jQuery中的callback

js 中callback函数的定义和使用

理解javascript中的回调函数(callback)

Vue.nextTick(callback)