<!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>柯里化</title>
</head>
<body>
<script>
/** 柯里化: 把一个多参数函数转化为一个嵌套的一元函数的过程 多元参数单元化**/
function add(x, y, z) {
return x + y + z;
}
// add(1, 2, 3);
// add(1)(2)(3);
// 柯里化
const curry1 = function (fn) {
return function (x) {
return function (y) {
return function (z) {
return fn(x, y, z);
}
}
}
}
// 通用柯里化
const curry2 = function (fn) {
return function curryFn(...args) {
if (args.length < fn.length) {
return function () {
return curryFn(...args, ...arguments);
}
} else {
return fn(...args);
}
}
}
let myAdd = curry2(add);
console.log(myAdd(1)(2)(3));
// 意义:1、参数复用
const str1 = 'aaa';
const str2 = 'bbb';
function addPre(pre, str) {
return pre + '-' + str;
}
let pre = 'AA';
// console.log(addPre(pre, str1));
// console.log(addPre(pre, str2));
let myAddPre = curry2(addPre)(pre);
console.log(myAddPre(str1));
console.log(myAddPre(str2));
// 意义: 2、延迟执行
</script>
</body>
</html>
12-26
2697
02-06