- 一个函数 可以接收多个参数,反复被调用
- fn(1, 2, 3, 4, 5)(6, 7)(8, 9, 10) 该技术被命名为函数柯里化
- 需求: 求和功能 55结果
- 不固定参数个数参数
- 第一次执行 返回函数
- 后续执行返回函数
- 缓存参数
// 闭包的应用场景: 避免全局变量命名冲突
function currying() {
// arguments是伪数组,具备数组的属性,不包含函数
const args = Array.prototype.slice.call(arguments);
// Array.prototype.slice是一个原型上的方法
// call改变this的指向
// 数组方法依赖于内部的this数据容器来执行
const inner = function inner() {
args.push(...arguments);
return inner
}
inner.getValue = function() {
return args.reduce((res,ele) => {
return res + ele
}, 0)
}
return inner;
}
const res = currying(1, 2, 3, 4, 5)(6, 7)(8, 9, 10)
const resNum = res.getValue()
console.log(resNum ) // 55