zoukankan      html  css  js  c++  java
  • javascript回调函数那些事~

    什么是回调函数?

    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件条件进行响应。

    1. 使用回调函数实现异步操作~

    // 示例
    function add(num1, num2, callback){
        var sum = num1 + num2;
        callback(sum);
    }
    
    function print(num){
        console.log(num);
    }

      note:当一个调用要耗费很长时间,导致整个执行队列等待执行结果而阻塞不能继续前进时,如能够通过异步回调的方式的话,那么主执行队列可以继续前进;而耗时调用执行完毕后,调用回调函数的形式通知主执行队列来拿回执行结果,进一步处理.....

    2. 我们也可以使用回调函数来执行同步操作。

    // 目的是在func1代码执行完成后执行func2。
    var func1=function(callback){
        //do something.
        (callback && typeof(callback) === "function") && callback();
    }
    
    func1(func2);
        var func2=function(){
    }

    回调函数的使用场景

    1. 资源加载:动态加载js文件后执行回调,加载iframe后执行回调,ajax操作回调,图片加载完成执行回调,AJAX等等。(常用)
    2. DOM事件及Node.js事件基于回调机制(Node.js回调可能会出现多层回调嵌套的问题)。
    3. setTimeout的延迟时间为0,这个hack经常被用到,setTimeout调用的函数其实就是一个callback的体现
    4. 链式调用:链式调用的时候,在赋值器(setter)方法中(或者本身没有返回值的方法中)很容易实现链式调用,而取值器(getter)相对来说不好实现链式调用,因为你需要取值器返回你需要的数据而不是this指针,如果要实现链式方法,可以用回调函数来实现
    5. setTimeout、setInterval的函数调用得到其返回值。由于两个函数都是异步的,即:他们的调用时序和程序的主流程是相对独立的,所以没有办法在主体里面等待它们的返回值,它们被打开的时候程序也不会停下来等待,否则也就失去了setTimeout及setInterval的意义了,所以用return已经没有意义,只能使用callback。callback的意义在于将timer执行的结果通知给代理函数进行及时处理。

  • 相关阅读:
    ZLL网关程序分析
    ZLL主机接口的信息处理流程
    TI Zigbee Light Link 参考设计
    基于能量收集的智能家居-2013国家级大学生创业实践项目申报_商业计划书_V0.2
    office excel 装Visual Studio后报错解决方案
    php随机生成验证码
    Mysql添加外键约束
    hdu 1232 畅通工程
    hdu 1162 Eddy's picture (Kruskal 算法)
    hdu 1102 Constructing Roads (Prim算法)
  • 原文地址:https://www.cnblogs.com/enmeen/p/6790560.html
Copyright © 2011-2022 走看看