前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【编程基础第十二讲】web开发编程基础--回调函数

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

作者头像
程序员互动联盟
发布2018-03-15 11:57:44
6330
发布2018-03-15 11:57:44
举报
存在问题:

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

如何实施:

a.非参数回调函数

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

代码语言:javascript
复制
setInterval(function(){},timer);
代码语言:javascript
复制
这个function(){};就是回调函数了,那么setInterval是怎么实现的呢?

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

举个例子,

代码语言:javascript
复制
var a = function(){

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

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

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

代码语言:javascript
复制
function demo(one,callback)
{
	alert(one);
	if(callback && callback instanceof Function) //判断是否传参,以及参数类型
		callback();
}

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

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

b.带参数的回调函数。

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

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

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

代码语言:javascript
复制
function each(arr,callback){
       for(var i = 0,l = arr.length; i < l ; i++ ){       
       //..code
      }
}

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

于是我们想到call函数

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

代码语言:javascript
复制
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等等

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档