【编程基础第十二讲】web开发编程基础--回调函数

时间:2022-05-04
本文章向大家介绍【编程基础第十二讲】web开发编程基础--回调函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
存在问题:

我们都知道C语言存在回调函数,那么JavaScript中的回调函数是如何实现的?

如何实施:

a.非参数回调函数

这类回调函数大多比较简单,往往传一个函数名就可以。诸如此类的用法,有setInterval函数,大致的实现如下

setInterval(function(){},timer);
这个function(){};就是回调函数了,那么setInterval是怎么实现的呢?

如此,就有雏形了,接下来,该如何写这个函数。我们知道,js是可以通过函数名来调用函数的。

举个例子,

var a = function(){

}a();//以上代码中,匿名函数可以通过变量a来调用

由此想到,demo函数可以通过,callback()来调用。

但,等等,万一没传参数,或者传的不是函数对象该如何。于是,可以判断参数以及其类型

function demo(one,callback)
{
	alert(one);
	if(callback && callback instanceof Function) //判断是否传参,以及参数类型
		callback();
}

demo('a',function(){
	alert('b');
})

以上就是第一种方法,是不是很简单

b.带参数的回调函数。

这类函数,往往用的比较多。比如常用的jquery中,遍历数组或对象的函数each()。他接受一个对象或数组和一个回调函数,来完成对遍历结果的输出。

如果我们用第一种方法,则无法完成传参。此时我们该如何做?

首先,我们先写出该函数的大致雏形(为了方便说明,以下函数只针对数组,遍历对象,请大家自行实现)

function each(arr,callback){
       for(var i = 0,l = arr.length; i < l ; i++ ){       
       //..code
      }
}

以上代码中,我们遍历了数组,但是并不能通过回调函数来使用。

于是我们想到call函数

上面的代码可以改写成如下

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);
});
//输出的结果为0-----6等等