最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 浅谈 JavaScript_callback() 回调函数

    正文概述 掘金(优岚)   2021-07-18   557

    MDN的文档中,对**callback()**的定义为:

    被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数。

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

    1. 理解回调函数

    调用过程:函数a的参数为函数b,当函数a执行完之后再去执行b

    打个比方

    你去上学,妈妈送你去上学并叮嘱你要记得将缴费单交给老师。

    此时,函数a为妈妈送你上学,函数b为你将缴费单交给老师。也就是你要做完函数a,才会去执行函数b。

    提个疑问:

    Q:为什么不直接把整个事情在函数a中写好,而是要通过一个参数进行回调呢?

    A:如果你直接写进去,function a(){...;b();},那就直接写死了,失去了变量的灵活性。当你要传入别的函数时,需要重新写一遍函数a。

    2. 代码展示

    function a(callback) {      
       console.log("parent函数a!");   
       console.log("调用回调函数");   
       callback(); // 调用回调函数
    }
    
    function b(){ console.log("回调函数b"); }   
    
    function c() { console.log("回调函数c"); }   
      
    function test(){ a(b); a(c); }
    
    test();
    

    3. 为什么需要回调

    JavaScript 在浏览器中运行,浏览器的主进程是单线程事件循环。如果我们尝试在单线程事件循环中,执行长时间运行的操作,则会阻止该过程。

    JavaScript 是按从上到下的顺序运行代码。在有些情况下,必须在某些情况发生之后,代码才能运行,这就不是按顺序运行了。这是异步编程。

    回调函数确保:函数在某个任务完成之前不运行,在任务完成之后立即运行。它帮助我们编写异步 JavaScript 代码,避免问题和错误。

    在 JavaScript 里创建回调函数的方法是:将它作为参数传递给另一个函数,然后当某个任务完成之后,立即调用它。

    4. Javascript 回调地狱

    当多个异步函数一个接一个地执行时,会产生回调地狱。它也被称为厄运金字塔

    代码变得更加难以理解,以及难以维护和修改。这是由回调函数的嵌套而引发的。

    var p_client = new Db('integration_tests_20', new Server("127.0.0.1", 27017, {}), {'pk':CustomPKFactory});
       p_client.open(function(err, p_client) {
           p_client.dropDatabase(function(err, done) {
               p_client.createCollection('test_custom_key', function(err, collection) {
                   collection.insert({'a':1}, function(err, docs) {
                       collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}, function(err, cursor) {
                           cursor.toArray(function(err, items) {
                               test.assertEquals(1, items.length);
     
                               // Let's close the db
                               p_client.close();
                           });
                       });
                   });
               });
           });
       });
    
    

    ↑ 就如上面的代码

    5. 如何避免回调地狱?

    1. 使用promise
    2. 借助 async-await
    3. 使用 async.js 库

    6. 优点和使用场景

    用一句话概括:在直接调用函数A()时,把另一个函数B()作为参数,传入函数A()里面,以此来通过函数A()间接调用函数B()。

    优点

    • DRY,避免重复代码

    • 可以将通用的逻辑抽象

    • 加强代码可维护性

    • 加强代码可读性

    • 分离专职的函数

    使用场景

    • 异步执行(例如读文件,发送HTTP请求)
    • 事件监听和处理
    • 设置超时和时间间隔的方法
    • 通用化:代码简洁

    一篇关于callback()的好文:[从零起步,真正理解Javascript回调函数](segmentfault.com/a/119000002…)


    起源地下载网 » 浅谈 JavaScript_callback() 回调函数

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元