七、函数式编程

一、概念

函数式编程通过使用函数,来将值转换成抽象单元,接着用于构建软件系统。
命令式编程和函数式编程的区别?
命令式编程往往是建立在直接操作和检查程序状态之上的。
函数式,倾向于把程序拆分,并抽象成多个函数组装回去。
1、高阶函数

  • 函数可以作为返回值(给了一些函数组合,编排,缓存的能力)
  • 函数可以作为参数传递(给了一些函数,包装的能力)

优点:

  • 表达力更清晰
  • 利于复用
  • 利于维护
    2、纯函数
  • 一个函数如果输入参数确定,那么输出的结果一定是唯一的。
  • 无状态的
  • 无副作用的
    举例
//这是有副作用的
const minusCount = (num) => {
	return window.count - num;
}
//要将有副作用的抽出来
const xxx =()=>{ return window}
//这样这个函数才是纯函数
const minusCount = (global,num) => {
	return global.count - num;
}

3、柯里化
是把接受多个参数的函数变换成接受一个单一的参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

const minusCount = (global, num) => {
	return global.count - num;
}
const minusCount = (global) => {
	return function(num){
	return global.count - num;
	}
}
minusCount(global,num);
minusCount(global)(num)

二、实例

1、返回值为函数
假如我们有一个计算密集型函数,我们需要对这个函数进行包装,如果让这个函数。之前计算过就不再计算,直接返回值。

const memorize = fn => {
	let cacheMap = {};
	return function(...args){
	const cacheKey = args.join('_');
	if(cacheKey in cacheMap){
		return cacheMap[cachekey];
	} else{
		return cacheMap[cacheKey] = fn.apply(this||{},args)
	}
	}
}
function add(a,b){
	return a+b;
}
const madd = memorize(add);
madd(1,2);
madd(1,2);
madd(1,2);

2、参数和返回值都是函数
在执行任务前先执行bf1,改造成执行一个任务前可接受多个任务执行,且前一个任务执行的结果为后一个任务的输入参数。
这样柯里化后的函数式编程会提取公用逻辑,实现逻辑复用。

const warppedBefore = function(fn){
	return fucntion(...args){
		bf1();
		return fn.apply(this,args);
	}
}
const compose = (...rest) => {
	return (startNum) => {
		return rest.reduce((total,item) => {
			return item(total)
		},startNum)
	}
}
const warppedBeforeList = (...bf) => function(fn){
	return function(args) {
		const c = compose(...br)(args);
		return fn.call(this,c) 
	}
}
const fn_new = warppedBeforeList(bf1,bf2,bf3)(fn);
fn_new()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值