1、对柯里化的理解
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数的过程
2、柯里化的结构
//1、普通函数
function add(x, y, z) {
return x + y + z
}
var result = add(10, 20, 30)
//2、函数柯里化
function sum1(x) {
return function(y) {
return function(z) {
return x + y + z
}
}
}
var result1 = sum1(10)(20)(30)
//3、函数简写
var sum2 = x => y => z => x + y + z
var result2 = sum2(10)(20)(30)
3、柯里化的作用
让函数的职责单一、复用参数逻辑
4、柯里化的实现
function myCurry(fn) {
function curry(...args) {
//1. 当已经传入的参数 大于等于 需要的参数时, 就执行函数
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
//2. 没有达到个数时, 需要返回一个新的函数, 继续来接收的参数
return function (...args2) {
//3. 接收到参数后, 需要递归调用curry来检查函数的个数是否达到
return curry.apply(this, args.concat(args2))
}
}
}
return curry
}
function add(x, y, z) {
return x + y + z
}
let curryAdd = myCurry(add)
console.log(curryAdd(10, 20, 30))
console.log(curryAdd(10, 20)(30))
console.log(curryAdd(10)(20)(30))
5、柯里化的应用场景
在vue源码等中比较常见 ,待有空补录。