回调函数
应用程序时常会通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。
总结一下回调函数的两种写法与用法:
- 非参数回调函数:
这种回调比较简单 ,往往只需传一个函数名就可以。
function demo(arg,callback){
}
再来看看怎么写这个函数 在js中是可以通过函数名来调用函数的
例如:
var aa = function (){
var str = "hello world"
console.log(str); // hello world 匿名函数可以通过变量a来调用
}
aa();
所以说,demo函数可以通过callback()来调用
如果说没有传参数或者传入的不是函数对象 我们可以判断参数以及其类型
function demo(one,callback){
console.log(one)//a
if(callback && callback instanceof new Function)//判断是否传参,以及参数的类型
callback();
}
demo('a',function(){//传入的参数值,函数
})
2.带参数的回调函数
这类函数使用的比较多,例如在jQuery中宾利数组或对象的函数each(),接受一个函数或数组和一个回调函数,来完成对遍历结果的输出。
如果使用1.中的方法,则不能完成传参。
解决方法:
function each(arr,callback){
for(var i = 0,l = arr.length; i < l ; i++ ){
}
}
上述代码变量里了数组,但是不能通过回调函数来使用,callback函数可以解决
function each(obj,callback){
for(var i=0,l = obj.length;i<l;i++){
callback.call(obj,i,obj[i]); //用callback来替换obj,所以实现为callback(i,obj[i]),正好将数组遍历;
}
}
//为了证明函数的正确性,我们做如下测试
var json = [6,5,3,2,8,4];
each(json,function(i,n){
alert(i+","+n);
});
以上是自己总结的calllback回调的两种写法