从柯里化分析JavaScript重要的高阶函数实例
什么是柯里化
柯里化(Currying)是一种将接收多个参数的函数转换成一系列接收单个参数的函数的技术。
在柯里化中,我们首先声明一个函数并定义它的第一个参数,然后返回一个新的函数,新的函数接受剩余的参数,然后继续返回一个函数,这个过程一直持续到最后一个参数被处理。
多个参数的函数比如add(x, y),可以被柯里化为一个接受一个参数x并返回一个函数的函数add(x),这个函数接受一个参数y并返回x + y。
柯里化的优势
柯里化的优势是可以在前面处理参数,并返回一个接收剩余参数的函数。这样可以创建可以重复利用的高效方法。在一些场景下柯里化后的函数会更加的可读,可维护,可复用。它们和ES6的箭头函数一样,能够简化代码的写法。
高阶函数实例1
function currying(fn) {
return function() {
if (fn.length > arguments.length) {
var slice = Array.prototype.slice;
var args = slice.apply(arguments);
return function() {
return currying(Function.prototype.bind.apply(fn, [null].concat(args.concat(Array.prototype.slice.apply(arguments)))));
}
}
return fn.apply(null, arguments);
}
}
function sum(x, y, z) {
return x + y + z;
}
var a = currying(sum)(1)(2)(3);
console.log(a); // output: 6
这里我们定义一个currying函数,接收一个函数作为参数,返回一个柯里化后的函数,并通过arguments的长度和传入函数的参数是否相等,判断是否需要继续柯里化。
高阶函数实例2
var curry = fn => {
return judge = (...args) => {
return args.length === fn.length ? fn(...args) : (arg) => judge(...args, arg);
}
}
function currySum(x, y, z) {
return x + y + z;
}
var a = curry(currySum)(1)(2)(3);
console.log(a); // output: 6
这里我们通过箭头函数的写法,定义一个curry函数。通过...args获取传入函数的参数,并通过args的长度和传入函数的参数是否相等,判断是否需要继续柯里化。
总体来说,柯里化函数是一种很强大的高阶函数,可以将函数的可重用性提高到一个更高的阶段,可以用简单、可组合、可读性强的方式写出复杂的逻辑代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从柯里化分析JavaScript重要的高阶函数实例 - Python技术站