javascript - js的callback到底是什么。有什么实际应用。

rt问题如上--最好麻烦贴一下代码

# JavaScript
伊谢尔伦 伊谢尔伦 3401 天前 526 次浏览

全部回复(8) 我要回复

  • 巴扎黑

    巴扎黑2017-04-11 12:40:30

    一个函数的作用是完成某一部分的任务,
    一个十分耗时的任务,可以让程序等待这个任务执行完成,获得返回值然后程序继续执行,这种叫做同步执行。也可让后台默默的先接收下这个任务,当前的程序继续往下执行,等后台执行完成这个任务,通过某种方式把处理结果发送给当前的程序,这种叫做异步执行。通信的方式可以是信号量,事件,回调,轮询等。比如一个 Ajax任务需要 10s 钟:

    var data = syncAjax(URL); // 同步Ajax
    console.log('sync return !');
    
    asyncAjax(URL/*其他必要的参数,暂略*/);
    console.log('async return !')

    同步的方式执行syncAjax 直到 10s 之后这句才会执行完成,把 Ajax 的数据赋值给data。所以10s 之后才会执行 console.log('sync return !');。这种方式在 JS 不太好,因为JS是单线程,一直在这里等待 10s ,那么将会后很长时间整个浏览器没有响应,所以不可取。当然 nodejs 里面也提供了很多同步的函数。

    对于异步执行的asyncAjax,这一句立即执行完毕,所以会立即输出console.log('async return !'),可是由于Ajax 还没有完成,所以不能把ajax 的数据返回给当前执行的程序(因为系统还没有获得服务器发送回来的值)。等到服务器返回数据了,需要用某种方式通知当前的程序,回调函数就是一种。比如

    function processData(data){}
    asyncAjax(URL,processData);
    console.log('async return !')

    当后台获得Ajax的数据gdata,系统调用回调函数processData,其中第一个参数是服务器返回的数据data,这样当前的程序就可以通过processData处理 ajax 返回的数据了。

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:40:30

    var fn = function (callback) {
        callback('callback');
    };
    
    fn(function (value) {
        console.log(value);
    });

    回复
    0
  • PHPz

    PHPz2017-04-11 12:40:30

    在JavaScript中,当一个函数A作为另外一个函数B的其中一个参数时,则函数A称为回调函数,即A可以在函数B的周期内执行
    常见应用ajax 返回函数。

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:40:30

    callback 英译汉的意思是回调

    回复
    0
  • 阿神

    阿神2017-04-11 12:40:30

    简单理解,callback就是方法里面套的一个方法,这个方法就是回调函数。
    nodejs 一般在调用一个方法的时候,把错误和结果放到回调函数里做处理

    eat(function(err,food){
        if(err) {
            console.log(err); 
            return;
        } //吃的噎着了,不能吃了
        console.log(food); //吃的什么东西,味道还不错
    })

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-11 12:40:30

    我就想知道,这样的问题,明明可以通过看书或者百度得到比这里的99%的答题者提供的更为周到、详细、具体,通俗易懂的答案,为什么不先通过自己的努力看看能不能获取到想要的结果呢?

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 12:40:30

    //回调函数:函数中的参数如果是另一个函数的话,那么这个作为参数的函数就是回调函数,可以在需要的时候在函数体内调用这个函数。
    
    function a(callback){                 //4、找到函数a(),执行。     //11、第二次执行函数a()。
         console.log("我是parent函数a!"); //5、输出。                 //12、输出。
         console.log("调用回调函数");      //6、输出。                 //13、输出。
         callback();                     //7、执行传递过来的函数b()。  //14、执行传递过来的函数c()。
    }
    
    function b(){ //8、找到函数b()
         console.log("我是回调函数b");     //9、输出,完成函数a()回调函数b()的执行。
    }
    
    function c(){ //15、找到函数c()。
         console.log("我是回调函数c");     //16、输出。
    }
    
    function test(){                     //2、找到函数test(),执行函数。
         a(b);                           //3、执行函数a(b)。
         a(c);                          //10、执行函数a(c)。
    }
    
    test();                             //1、执行函数test()。
    

    /*输出顺序:
    我是parent函数a!
    调用回调函数
    我是回调函数b
    我是parent函数a!
    调用回调函数
    我是回调函数c
    */
    这是我之前看到的一个例子,然后我把顺序撸了一遍并注释。

    回复
    0
  • 取消 回复 发送