<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 几个参数就是几元参数 ------> 四元参数
function add(a,b,c,d){
return a+b+c+d;
}
// 柯里化:就是为了将多元参数变成一元参数的过程
function curry(add) {
// 第一(三、五...)个参数执行
return function curryFn(...age) { // ... 拓展运算符
// 不满足条件 add.length 就是参数的个数
if (add.length > age.length) {
// 第二(四、六...)个参数执行这个
return function (...age2){
// 然后直接 合并参数 回调到 curryFn(...age) 再次执行 到 第二次参数执行的地方
return curryFn(...age,...age2)
}
} else {
// 满足条件 直接 执行这个函数
return add(...age)
}
}
}
let myadd = curry(add); // 回调函数 返回了一个 curryFn(...age)函数
console.log(myadd(1,2,3,5)); // 原先传多个参数 ------> 11
console.log(myadd(1)(2)(3)(5)); // 柯里化之后 ------> 11
</script>
</body>
</html>