回调函数
什么是回调函数呢?其实就是将函数a作为函数b的参数来使用,这就是回调函数,也就是先执行函数a,完事儿后执行函数b。下面就是一个简单的回调函数例子,在函数a里面调用函数b,执行完函数a然后执行函数b,也就是先弹出111,再弹出222。
function a(cb,a){
alert('111');
cb(a);//这里是将回调函数的参数作为与回调函数同等级的参数进行传递,就是函数b里面的参数e和函数a里面的参数a是一样的。
}
function b(e){
alert(e);
}
a(b,"222");
//也可以这么写,看个人喜好
function a(a,cb){//a('111',function(e){alert(e);}) '111' => a; function(e){alert(e) => cb。
alert(a);
var zhi = "222";
cb(zhi);
}
a('111',function(e){//cb(zhi) => cb(e)
alert(e);
})
我们在上面说到先执行完函数a然后执行函数b,这么理解也对,我们看下面的代码。
function a(cb,e){
cb(e);//我们可以看到回调函数是排在队列前的
alert("one");//我们的主函数排在回调函数后面
}
function b(e){
alert(e)
}
a(b,'two');//执行后回依次弹出 two 和 one 。
/*注意:上下两段注释一个 分开看*/
function a(cb,e){
cb(e);//我们可以看到回调函数是排在队列前的
alert("one");//我们的主函数排在回调函数后面
}
function b(e){
setTimeout(function(){//这里模拟一下耗费时间的操作
alert(e)
},2000)
}
a(b,'two');//执行后回依次弹出 one 和 two 。
/*上面代码基本一样,但是执行的顺序却不一样,我们要知道js是单线程的,所以执行代码都是一行一行的在
队列中执行,如果在队列中有一个需要时间很长才能执行完,那下面的也都跟着等待,而这时我们用回调函数就
不用非得排队执行了。所以在第二段代码会先执行函数函数a(主函数),而不用等函数b(回调函数)执行完再执行。*/
如果上面说的不明白的话,可以这么理解,js会按照队列中的代码运行(从上到下),当回调函数执行时间太长的时候,主函数也可以接着向下执行队列中的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等。
有哪里不对的地方,希望各路大神帮忙指点一下!!!