js回调函数的写法

上次一个项目中用到了回调函数,对于js水平还停留在菜鸟水平的我,自然免不了研究一番。大概总结了两种写法。


a.非参数回调函数

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

function demo(arg,callback){
}

如此,就有雏形了,接下来,该如何写这个函数。我们知道,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函数(对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等等


好了,以上两种方法,说完了,希望对大家有帮助






  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值