科里化和高阶函数例子

108 阅读1分钟

add

  • 科里化执行
function add(...args1) {
    const array = [...args1]
    function fn(...args2) {
        array.push(...args2)
        return fn
    }
    fn.toString = function () {
        return array.reduce((p, c) => p + c, 0)
    }
    return fn
}

alert(add(1)(2))
alert(add(1)(2)(3,4))
alert(add(1)(2,3,4))
alert(add(1)(2,3,4)(5)(6,7))

high

写高阶函数high

  • 传入参数等于需要参数个数就返回数据
  • 否则不返还,等后续填入后再执行
function high(fn) {
    const length = fn.length
    const array = []
    function inFn(...args) {
        array.push(...args)
        if (array.length >= length) {
            const temp = array.splice(0, length)
            return fn(...temp)
        }
        return inFn
    }

    return inFn
}

var fn1 = high(function (a, b, c) {
    return a + b + c
})
fn1(1)(2, 3)
fn1(1)(2)(3)
fn1(1, 2, 3)
var fn2 = high(function (a, b) {
    return a + b
})
fn2(2, 3)
fn2(2)(3)