10. 柯里化
leezozz 1/8/2023 js
# 柯里化
使用柯里化解决上一个案例的硬编码问题
// 纯的(有硬编码,后续可以通过柯里化解决)
function checkAge(age) {
let mini = 18
return age >= mini
}
1
2
3
4
5
2
3
4
5
# 普通的纯函数
function checkAge(min, age) {
return age >= min
}
console.log(checkAge(18, 20)) // true
console.log(checkAge(18, 24)) // true
console.log(checkAge(22, 24)) // true
1
2
3
4
5
6
2
3
4
5
6
# 函数的柯里化
// 使用了高阶函数:返回值是一个函数
// 使用了闭包:内部函数访问了外部函数的作用域
function checkAge(min) {
return function(age) {
return age >= min
}
}
const getAge = checkAge(18)
console.log(getAge(22))
// ES6写法
let checkAge = (min) => (age => age >= min)
const getAge = checkAge(18)
console.log(getAge(22))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 柯里化概念:(Currying)
- 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变)
- 然后返回一个新的函数接受剩余的参数,返回结果
- (当函数有多个参数时可以进行改造。调用一个函数只传递部分的参数,并且返回一个新的函数,新的函数接受剩余的参数,并且返回相应的结果。这就是柯里化。)