函数式编程

93 阅读1分钟

无状态 & 无副作用

a. 无状态 - 数据不可变 --- 不可操作改变数据源
b. 无副作用 - 函数内部不可对系统任何参数/变量进行改动

函数柯里化

// f(x, y, z) => f(x)(y)(z)
// 实现一个add(1)(2)(3)(4)...累加函数
// 1. 构造柯里化结构
// 2. 输入 处理外层arguments => 类数组处理
// 3. 传入参数无限拓展 => 递归 => 返回递归函数本身
// 4. 主功能 累加
// 5. 输出 从函数到产出 toString
const add = function() {
    // 输入处理
    let args = Array.prototype.slice.call(arguments);
    // 构造柯里化结构
    let inner = function() {
        // 主功能
        args.push(...arguments);
        return inner;
    }
    
    inner.toString = function() {
        args.reduce((pre, cur) => {
            return pre + cur;
        })
    }
    
    return inner;
}