什么是回调函数

这篇文章我想过js向各位解释什么是回调函数,很多语言中都存在回调函数机制,道理都是想通的。

我们都知道函数中的参数是用来改变函数的行为的,但当参数不足以改变函数的行为时,我们该怎么办呢?此时,我们就需要传递一个过程,或者函数进入,来协助原函数改变其行为, 而被传递的函数,我们就称之为回调函数。概念有些绕,也有些枯燥,没关系,我们一点一点来学习。

首先我们先科普一个js的语法,我们知道,js中存在一种function的数据类型。function即我们所讲的函数,在js中,function的声明分为普通函数声明和变量式函数声明,普通函数声明及例如,function foo(){return 1},这里这个function foo,即是普通函数声明,但是我们同样可以讲foo函数赋值给一个普通变量,var tmp = foo;这是这个tmp就是一个function类型的变量(通过typeof(tmp)),也就是变量式函数。当我们去输出tmp变量时,发现tmp的内容为foo函数的函数体,所以,当函数不加括号时,代表的即为整个函数体。变量式函数就是回调函数的必用方式。

	//先声明函数变量
	var func=foo;
	//写出具体实现
	function foo(){
		return 1000;
	}


既然函数可以声明为变量,那这个“变量”能否像普通的int,String类型变量似的当做参数传入到另一个函数当中去呢,答案是肯定的。

<script>
	function tmp (a, b, fun){
		return a + b + fun();
	}
	
	alert(tmp(1, 2, foo));
	
	function foo(){
		return 1000;
	}
	
</script>
这这个片段里tmp函数,有三个参数a,b和fun,由上面我们知道,当一个变量式函数位加括号时,即代表这个函数体,当加上括号,即运行这个函数体,这里fun(),即代表运行fun函数。这里foo函数即代表一个回调函数传入到tmp函数中去。

当然我们也可以省略写为:

        function tmp (a, b, fun){
		return a + b + fun();
	}
	
	alert(tmp(1, 2, function(){
		return 1000;
	}));
这样看起来有没有更熟悉一点,当然我们fun函数中也可以添加参数。

js中是用这种方式来实现的,在c中,是通过传入回调函数的指针来实现调用的。当然其实想一想,回调函数有些像设计模式中的策略模式的意思,封装算法的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值