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

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://luxiao1223.blog.51cto.com/2369118/482885

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

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

    1. <html> 
    2.  
    3. <head> 
    4.  
    5. <title>回调函数(callback)</title> 
    6. <script language="javascript" type="text/javascript"> 
    7. function a(callback) 
    8. {    
    9.     alert("我是parent函数a!"); 
    10.     alert("调用回调函数"); 
    11.     callback(); 
    12. function b(){ 
    13. alert("我是回调函数b"); 
    14.  
    15. function c(){ 
    16. alert("我是回调函数c"); 
    17.  
    18.  
    19. function test() 
    20.     a(b); 
    21.    a(c); 
    22.  
    23. </script> 
    24. </head> 
    25.  
    26. <body> 
    27. <h1>学习js回调函数</h1> 
    28. <button onClick=test()>click me</button> 
    29. <p>应该能看到调用了两个回调函数</p> 
    30. </body> 
    31.  
    32. </html> 

    关于如何给函数b传递参数,这个以后再来写。

  • 相关阅读:
    重写与重载的区别
    UDP模式与TCP模式的区别
    什么是GC?为什么会有GC?
    centos 7-8 安装 ms sql server 2019
    Phaser3 游戏开发入门——自定义构建Phaser库
    Visual Studio 下C#编译器在解析属性名时如果增加一个get_[您的另一个已经包含在类中属性名]的属性会报错,微软大哥这是什么鬼?
    Visual Studio 2015 Update 3 ISO
    react项目中引用amap
    js 截取网址中的某一段字符串
    解决react下找不到原生高德地图AMap类的问题
  • 原文地址:https://www.cnblogs.com/jiangtuzi/p/3782170.html
Copyright © 2011-2022 走看看