js高阶函数的理解

什么是高阶函数,高阶函数又是如何使用,值得我们去思考。
对于高阶函数要满足以下两个条件之一:
1、函数可以被作为参数传递;
2、函数作为返回值输出。
接下来,我们对以上的条件进行一个讲解和介绍,让我们进一步理解高阶函数。
1、函数作为参数被传递
在ajax异步请求的应用中,回调函数的使用是非常频繁的。

var getUserInfo=function(id,callback){
			$.ajax('http://'+id,function(data){
				if(typeof callback ==='function'){
					callback(data)
				}
			})
		}

回调函数的应用不仅仅只在异步请示中,当一个函数不合适执行一些请求的时候,我们也可以把这些请求封装成一个函数,并把它作为参数传递给另一个函数,“委托”给另一个函数来执行。
Array.prototype.sort
Array.prototype.sort接受一个函数,这个函数里面封装了数组元素的排序规则。
我们的目的是对数组进行排序,这个是不变的,那么以什么样的规则去做排序呢?这是可变的,我们可以把规则封装成函数,传入Array.prototype.sort。

[1,2,3].sort(function(a,b){
			return a-b>1;
		})

2、函数作为返回值输出
相比函数作为参数传入,函数作为返回值输出应用的场景更多,更能体现函数式的编程思想。也就是让一个函数返回一个可执行的函数,意味着运算过程是可持续的。
接下来我们来封装一个判断数据类型的对象吧

var Type={};
for(var i=0,type;type['String','Object','Number','Null','Array','Undefined','Boolean','Function'][i++];){
	(function(type){
		Type['is'+type]= function(obj){
			return Object.prototype.toString.call(obj)==='[object'+type+']';
		}
	})(type)
};
Type.isArray([1,2,3])//输出true

如上的例子是判断数据类型,例子还运用闭包解决了不同的i值取不同的type值,把每次循环的type值封装起来。Object.prototype.toString.call()作为Type对象的方法的返回值输出。当然还有更多的例子可对函数作为返回值输出这个条件进行理解。
高阶函数还可实现AOP;AOP(面向切面编程)的主要作用是把一些核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计,安全控制,异常处理之类的。
当然高阶函数还运用到函数柯里化,在下一次分享我将记录自己的对函数柯里化的心得,以及高阶函数的其他应用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值