函数柯里化

129 阅读1分钟

function add() { let args = Array.from(arguments) //获取函数参数,并转换为数组

    let inner = function () {
        // 定义inner函数,将后面的参数添加进去
        args.push(...arguments)
        return inner // 内部递归调用 inner
    }
    inner.toString = function () {
        //返回结果是一个字符串函数,因为内部调用了toString,此处重新定义toString
        return args.reduce(function (prev, cur) {
            return prev + cur
        })
    }

    return inner // 返回 inner 函数
}
const res = add(1, 2, 3)(2, 4) - 0 // 浏览器貌似不会单独执行toString,通过 - 0 隐式调用toString
console.log(res) // 12