JS函数柯里化

首先看看柯里化到底是什么?

维基百科上说道:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

什么情况下会用到函数柯里化?

1、我们不方便传入参数时,例如:

//回调
function a(b){ }
Promise.resolve().then(a(b));

如上所写,在then里面直接调用a方法的话,那么给then里面的就不是一个函数了,但是then里面是要给一个函数的。如果要达到这个效果的话,就要运用柯里化,如下所示:

Promise.resolve().then(a.bind(this,123));

2、我们写了一个方法,但是这个方法很多时候调用起来参数是固定的,例如:

fuction inputTest(reg, value){ } //验证表单的函数

假设有10个表单需要验证是否纯数字,每一次都需要输入验证规则和值,10个表单就要调用10次。对于验证是否纯数字来说,函数的第一个参数验证规则(reg)都是一样的,没必要输入10次,所以这里就需要柯里化,具体做法如下:

const numberTest = inputTest.bind(this, /^[0-9]*$/);
numberTest(123);

柯里化怎么实现

function aCurry(num1){
	return function(num2){
		console.log(num1,num2)
	}
}

function a(num1, num2){
}
aCurry(1)(2)

柯里化函数会接收到固定参数,然后再柯里化函数里面,返回一个新的函数,接收剩余参数。

手写实现一个bind函数

Function.prototype.mybind = function(thisArg){
	if(typeof this !== "function"){
		return;
	}	
	var _self = this;
	// args 获取第一个方法内的全部参数
	var args = Array.prototype.slice.call(arguments,1); 
	return function(){
		// 将后面方法里的全部参数和args进行合并
		var newArgs = args.concat(Array.prototype.slice.call(arguments));
		return _self.apply(thisArg, newArgs);//调用原方法本身
	}
}

总结

函数的柯里化,返回的是一个函数的函数。其实现方式,需要依赖参数以及递归,通过拆分参数的方式,来调用一个多参数的函数方法,以达到减少代码冗余,增加可读性的目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值