柯里化简介
js柯里化(currying)又译为卡瑞化或加里化,是把接受多个参数的函数,变为可接受多次调用的函数,并把每次调用的参数保存最后一次性返回结果,其实主要是运用了闭包和函数递归调用。
示例
function fn(){
// 运用闭包存参数
let _arg = Array.from(arguments)
return function ffn() {
// 最后返回
if(!arguments.length) {
// 求和
return _arg.reduce((sum, item) => sum + item)
} else {
// 合并参数
_arg = [].concat.call(_arg, Array.from(arguments))
// 递归
// return arguments.callee // ES5严格模式弃用
return ffn
}
}
}
console.log(fn(1, 2)(2)(3, 5)(4)(5)()) // 22
拓展
function fn(){
// 存参数
let _arg = [...arguments]
// 千万别使用箭头函数,否则arguments指向包裹函数的arguments
let ffn = function() {
// 合并参数
_arg = [].concat.call(_arg, [...arguments])
// _args.push(...arguments);
// 递归
return ffn
}
ffn.toString = function() {
return _arg.reduce((sum, item) => sum + item)
}
return ffn
}
console.log(fn(1, 2)(2)(3, 5)(4)(5)) // 22
网友评论