1. 函数组合应用
由若干个纯函数、偏函数、柯里化函数组合成一个新的函数,同时,形成数据传递。
挑选了一系列所需要的函数,把他们组合在一起,可以实现公共合作的效果。
代码示例:
function combination() {
var args = Array.prototype.slice.call(arguments);
return function(x) {
// reduceRight 具体方法可以查看官方文档
return args.reduceRight(function(res, ele) {
return ele(res);
}, x);
};
}
var arr = combination(add, spl, toUpper) // 三个函数,三个函数的数据都是相关联的
console.log(arr("tzh")); // 打印结果是 TZH520!!!
function toUpper(str) {
return str.toUpperCase();
}
function add(str) {
return str + "!!!";
}
function spl(str) {
return str + "520";
}
函数组合起来数据自左向右传递,
2. 柯里化
在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数技术
- 为什么使用柯里化
简化代码结构,提高系统的维护性,一个方法,一个参数,功能内聚,降低耦合
代码模拟柯里化思想
function add(a, b, c, d) {
return a + b + c + d;
}
//截取 arguments 实参 并返回一个函数
function agent(fn) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var arr = args.concat(Array.prototype.slice.call(arguments, 0));
return fn.apply(this, arr);
};
}
// 柯里化核心思想代码
function currie(fn, length) {
var length = length || fn.length;
return function() {
var arg_len = arguments.length;
if (length != arg_len) {
var arg = [fn].concat([].slice.call(arguments, 0));
return currie(agent.apply(this, arg), length - arg_len);
} else {
return fn.apply(this, arguments);
}
};
}
var curries = currie(add);
// 多种形式组合调用
var num1 = curries(1,3)(3)(4)
var num2 = curries(1,3,3)(4)
var num3 = curries(1,3)(3)(4)
console.log(num1,num2,num3);// 打印结果都是 13