javaScript函数柯里化的作用与好处

一、让函数的职责单一

1.在函数式编程中,我们其实往往希望一个函数的问题尽可能的单一,而不是将一大堆的处理过程交给一个函数来处理;
2.那么是否就可以将每次传入的参数在单一的函数中进行处理,处理完后在下一个函数中再使用处理后的结果;

例:比如下面的案例我们进行一个修改:传入的函数需要分别被进行如下处理

function add(x, y, z) {
  return x + y + z
}

每传入一个参数都对其进行一个处理
 1.第一个参数+22.第二个参数*23.第三个参数**2
function add(x,y,z){
实际开发逻辑会更繁琐
	x=x+2;
	y=y*2;
	z=z*z;
	return x+y+z
}

//把处理变到了3个函数里,哪个出问题了处理对应的就可以了
function sum(x,y,z){
	x=x+2;
	return function(y){
		y=y*2;
		return function(z){
			z=z*z
			//这一步不接收参数了,直接返回就可以了
			//return function(){
			//	return x+y+z
			//	}
			return x+y+z;
			}
	}
}

console.log(sum(10)(20)(30))
 

Ps:在函数式编程中,我们往往希望一个函数处理的问题是尽可能单一的,而不是将一大堆问题交给一个函数,全部由他来处理,函数式编程里所有的问题都是一个一个的小函数来解决的,可以放到一个大函数挨个处理,处理完成后将结果返回出去;另外一种编程方式是让一个函数的功能尽可能单一,一个处理完之后把结果交给下一个然后依次处理,而不是把所有的东西封装到一个函数里(可读性和可扩展性和单一职责的原则都很弱)

设计模式:单一职责原则
面向对象:封装一个类时,让这个类做的事情尽可能单一 (一个类只做一个东西,调用其他单一的类)

二、柯里化–逻辑的复用

例1:

function sum(m,n){
return m+n
}
//假如在程序中,我们经常需要把5和另外一个数字进行相加
console.log(sum(5,10))
console.log(sum(5,14))
console.log(sum(5,156))
console.log(sum(5,10333))
//这样写每次都要写这个5

//这个时候就可以这样做
function makeAdder(count){
	count=count*count
	return function(num){
		return count+num 
	}
}
//var result=makeAdder(5)(10)

//从闭包角度说是对count的复用
var adder5=makeAdder(5)
adder5(10)
adder5(14)

例2:

//打印日志
function log(data,type,message){
	console.log(`[${data.getHours()}:${data.getMinutes()}][${type}]:[${message}]`)
}
log(new Date(),"DEBUG","查找轮播图的Bug")
log(new Date(),"DEBUG","查询菜单的bug")
log(new Date(),"DEBUG","查询数据的bug")

//柯里化的优化
var log=date=>type=>message=>{
console.log(`[${data.getHours()}:${data.getMinutes()}][${type}]:[${message}]`)
}
//如果我现在打印的都是当前时间
var nowLog=log(new Date())
nowLog("DEBUG")("查找轮播图的bug")
nowLog("FETURE")("新增了添加用户的功能")

var nowAndDebugLog=log(new Date)("DEBUG");
nowAndDebugLog("查找轮播图的Bug")
nowAndDebugLog("查找轮播图的Bug")

var nowAndFetureLog=log(new Date)("FETURE");
//不同的功能用同一个方法实现
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值