一、什么是回调函数
把一段可执行的代码像参数一样传递给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
二、普通函数和回调函数
普通函数的调用:调用程序发出对普通程序的调用后,程序立即转向执行被调用的函数,知道被调用的函数执行完毕,再返回调用程序继续执行,从发出调用的程序角度来看,这个过程是:“调用”——>“等待被调用函数执行完毕”——>“继续执行”
对回调函数的调用:回调函数分为同步回调和异步回调,我们常用的一些方法都是同步回调的,单个线程需要等待结果的返回才能继续执行。异步回调在调用程序发出对回调函数的调用后,不等函数执行完毕,立即返回并继续执行。这样,调用程序执和被调用函数同时在执行。当被调函数执行完毕后,被调函数会反过来调用某个事先指定函数,以通知调用程序:函数调用结束。这个过程称为回调(Callback),这正是回调函数名称的由来。
var name = 'shimily';
var age = 20;
//主函数
function goTime(callback) {
console.log('hello');
callback && callback(); //有回调就执行,没有回调就不执行
console.log(age,'=========');
}
//回调函数
function actEnd(){
console.log(name);
}
/*调用方法*/
goTime(); //如果不传方法,则代表不需要执行回调
goTime(actEnd); //test是个方法,此处可以打印出test的值
程序在执行主函数的时候,当执行到callback && callback();时,有回调就执行,没有回调就不执行,我们这里的回调函数是actEnd(),当时注意!这里执行回调函数actEnd()的时候,主函数还是在执行的