当前位置:网站首页>JS函数柯里化
JS函数柯里化
2022-07-31 05:20:00 【前端备忘录】
首先看看柯里化到底是什么?
维基百科上说道:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
什么情况下会用到函数柯里化?
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);//调用原方法本身
}
}
总结
函数的柯里化,返回的是一个函数的函数。其实现方式,需要依赖参数以及递归,通过拆分参数的方式,来调用一个多参数的函数方法,以达到减少代码冗余,增加可读性的目的。
边栏推荐
猜你喜欢
随机推荐
Debian 10 dhcp 服务配置
多线程截取视频为每帧
windows下mysql忘记密码登录,并创建用户
map和set
IPTV直播列表
力扣.两数之和/四数相加||
webdriver.定位元素
VNC 启动脚本
常见网络攻击与防御方法
OneManager搭建
哈希表基础
什么样的人不适合入行编程?你真的适合学习编程吗?
递归访问目录,定义嵌套函数,打印斐波那契数列,对列表进行排序,map函数计算列表,filter函数过滤,reduce计算1~100的和
10.0 堆体系结构概述之元空间/永久代
Qt TreeView 问题记录
【内网开发日记】用websocket手搓一个聊天软件
WIN10,配置adb环境
ES6-01-ES的简介
ROS subscription to multiple topics time synchronization problem
MySQL表的增删改查(1)