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

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

阅读 15.1k
7 个回答

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

var fn = function (callback) {
    callback('callback');
};

fn(function (value) {
    console.log(value);
});
//回调函数:函数中的参数如果是另一个函数的话,那么这个作为参数的函数就是回调函数,可以在需要的时候在函数体内调用这个函数。

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
*/
这是我之前看到的一个例子,然后我把顺序撸了一遍并注释。

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

函数的参数本身是一个函数那么我们就称之为回调函数(callback),比如setTimeout的第一个参数
个人常用的两种场景:

  1. 异步回调 (操作需要网络请求等耗时的操作,操作完成后执行指定的函数)

//比如
$.get("http://api.xxxx.com/xxx",callback);
  1. 同步回调 (操作不耗时,但需要不同的处理方案)

function add(a, b, callback) {
    callback(a+b);
}

add(1,2,function(result) {
    console.log("result:" + result);
});

add(1,2,function(result){
    console.log("结果是:" + result);
});

callback 英译汉的意思是回调

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

eat(function(err,food){
    if(err) {
        console.log(err); 
        return;
    } //吃的噎着了,不能吃了
    console.log(food); //吃的什么东西,味道还不错
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题