• javascript之回调函数小知识


    Javascript异步编程方法------“回调函数”

    这是异步编程最基本的方法。

    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础

    首先说一下什么是个回调函数?

          在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。一般用于截获消息、获取系统信息或处理异步事件。

    回调函数实现的机制是

    ⑴定义一个回调函数;

    ⑵提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;

    ⑶当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。

    简单的说我们们可以像使用变量一样使用函数,作为另一个函数的参数,在另一个函数中作为返回结果,在另一个函数中调用它。当我们作为参数传递一个回调函数给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它。

    当包含(调用)函数拥有了在参数中定义的回调函数后,它可以在任何时候调用(也就是回调)它。

    回调函数是闭包的
    当作为参数传递一个回调函数给另一个函数时,回调函数将在包含函数函数体内的某个位置被执行,就像回调函数在包含函数的函数体内定义一样。这意味着回调函数是闭包的,之后也会介绍关于闭包的一些知识。众所周知,闭包函数可以访问包含函数的作用域,所以,回调函数可以访问包含函数的变量,甚至是全局变量。

    假定有两个函数f1和f2,后者等待前者的执行结果。

    f1();

    f2();

    如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数。

    function f1(callback){setTimeout(function () {// f1的任务代码callback();

    }, 1000);

    }

    执行代码就变成下面这样:

    f1(f2);

    采用这种方式,我们把同步操作变成了异步操作,f1不会堵塞程序运行,相当于先执行程序的主要逻辑,将耗时的操作推迟执行。

    回调函数的优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合( Coupling ),流程会很混乱,而且每个任务只能指定一个回调函数。

    有以下需求时你可以考虑使用回调:

    • 避免重复代码 (DRY—Do Not Repeat Yourself)
    • 在你需要更多的通用功能的地方更好地实现抽象(可处理各种类型的函数)。
    • 增强代码的可维护性
    • 增强代码的可读性

    我们在JavaScript中经常使用回调函数时注意以下几点,尤其是现在的web应用开发,在第三方库和框架中

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

    在这里我说的比较片面,有不足之处请谅解,同时也希望读者可以多多的提意见,以便改进

    爱前端,爱代码
  • 相关阅读:
    最新iOS发布App Store详细图文教程~
    介绍一个轻量级iOS安全框架:SSKeyChain
    今天科普一下 苹果开发者账号中:个人、公司、企业账号的区别
    iOS开发:Framework的创建
    JMS 在 SpringBoot 中的使用
    iOS 引入外部字体 otf/ttf/ttc
    公司企业苹果开发者账号中个人、公司企业账号的不同
    Git版本管理
    有关苹果手机下载应用后提示不受信任的企业开发者解决方案:
    尝试一下markdown
  • 原文地址:https://www.cnblogs.com/jtr122624520/p/5909088.html
Copyright © 2020-2023  润新知