当前位置:网站首页>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);//调用原方法本身
}
}
总结
函数的柯里化,返回的是一个函数的函数。其实现方式,需要依赖参数以及递归,通过拆分参数的方式,来调用一个多参数的函数方法,以达到减少代码冗余,增加可读性的目的。
边栏推荐
猜你喜欢

【Rhapsody学习笔记】4:Relations

【博学谷学习记录】超强总结,用心分享 | 软件测试 抓包

企业级 DevOps 究竟是什么?

浅谈音视频开发入门基础及进阶资源分享

Oracle入门 13 - Linux文件目录类命令

软链接和硬链接画图,以及代码,一级目录的解释,重定向,创建文件,删除文件,创建目录,删除目录,cp、mv命令的使用

C语言结构体(必须掌握版)

vs2022 xlua 集成第三方库编译报错Generator Visual Studio 15 2017 could not find any instance of Visual Studio.

【内网开发日记】用websocket手搓一个聊天软件

DOM操作-通过关系来获取元素
随机推荐
超详细!!!让你了解冒泡排序的底层逻辑和思想
文件内容浏览cut、uniq、sort、tr命令的使用,
选择排序法
ES6-class类
Unity软件中UGUI和NGUI的多语言开发
DOM-DOM的介绍以及通过方法获取元素
Oracle入门 08 - Linux 系统远程登录维护
vmware搭建redis集群遇到问题
2021年开发人员的绊脚石:构建时间长
浅谈音视频开发入门基础及进阶资源分享
【Rhapsody学习笔记】1:Hello World
实现二叉树的基本操作
nacos1.4.1创建配置报错
IDEA overview and installation and debugging
Oracle入门 10 - Linux 设备类型与文件目录结构
Oracle入门 06 - Windows 服务器安装配置
ES6-03-解构赋值
网盘程序 ZFile安装
什么样的人不适合入行编程?你真的适合学习编程吗?
vs2022 xlua 集成第三方库编译报错Generator Visual Studio 15 2017 could not find any instance of Visual Studio.