一:函数柯里化介绍
在计算机科学中,柯里化 (Currying)是把接受多个参数的函数 变换成接受一个单一参数(最初函数的 第一个参数)的函数 ,并且返回接受余下的参数且返回结果的新函数的技术。
函数柯里化是一种函数式编程技术,它可以将一个接受多个参数的函数转换为一系列只接受单个参数的函数。这种技术的主要目的是为了简化函数的调用方式,同时也可以提高代码的可读性和可维护性。
在函数柯里化中,我们可以将一个接受多个参数的函数转换为一个只接受一个参数的函数,然后再返回一个新的函数,这个新的函数也只接受一个参数。这个过程可以一直进行下去,直到我们得到一个最终的函数,这个函数只接受一个参数,并且返回我们最终想要的结果。
二:手写函数柯里化
基础使用
设计思路
- 定义接受一个参数的函数
- 内部返回一个接受剩余参数的新函数,返回累加结果
书写代码
在下方代码中,我们定义了一个参数为 a 的 sum 函数,并且在这个函数里返回了另一个参数为b的函数。在新函数里,我们将 a 和 b 求和并返回结果。这就是函数柯里化。
javascript
<script>
function sum(a){
return function(b){
return a+b
}
}
const data = sum(1)(2)
console.log(data);
</script>
运行效果
经典面试题
设计思路:
- 保存不定长参数
- 是否达到长度
- 累加5个参数
- 返回函数
书写代码
html
<script>
function sumMaker(length) {
// 存储参数
let nums = []
function sum(...args) {
nums.push(...args)
if (nums.length >= length) {
// 长度到length
const res = nums.slice(0, length).reduce((p, v) => p + v, 0)
nums = []
return res
} else {
// 长度没到length
return sum
}
}
return sum
}
let sum = sumMaker(5)
const data = sum(1, 2, 3)(4, 5, 6)
console.log(data)
</script>
运行效果
实际应用
函数柯里化常用于 参数的复用:为函数预制通用参数,供多次复用
html
<script>
// 判断类型
// 方法一
// const typeOfType = function (type) {
// // 复用 类型判断的逻辑
// function isUndefined(thing){
// return typeof thing === type
// }
// return isUndefined
// }
// 简化写法
const typeOfType = type => thing => typeof thing === type
// typeOfType动态生成类型判断函数,
const isString = typeOfType('string')
console.log(isString(123));
console.log(isString('haha'));
</script>
三:总结
通过上述介绍,其实函数柯里化可以理解为一种编程思想,在真正的开发中这种纯函数柯里化的问题是很少遇到的,更多的是用来面试,所以各位小伙伴对这个定义以及写法有所掌握即可。好啦,本文到此结束啦,希望能够对你有所帮助哦!