柯里化手写实现

参考:https://www.cnblogs.com/liuXiaoDi/p/12615860.htmlhtml

使用arguments和arguments.callee

function myCurrying(fn) {
    const vars = [];
    if (arguments.length > 0) {
        // vars.concat(Array.from(arguments));
        vars = [...vars, ...arguments];
        return arguments.callee;
    } else {
        return fn.apply(null, vars);
    }
}

其余思路

  • 1.手写jsonp
jsonp(url, data, callback) {
    
}

参考:http://www.javashuo.com/article/p-fwlpsrks-gk.htmljson

  • 2.通用柯里化函数
currying(func) {
    // return function: func(a1, a2, a3, ...) -> func_c(a1)(a2)(a3)...
}
  • 2.手写柯里化函数 -柯里化在工程中有什么用处?

https://www.zhihu.com/answer/192978122segmentfault

柯里化实现与问题:app

// (1) sum(a1)...(an)()
var currying = function(func) {
  const args = [];
  return function result(...rest) {
    if (rest.length === 0) {
      return func(...args)
    }
    args.push(...rest)
    return result
  }
}

// (2) sum(a1)...(an) ?

// (3) new_func = curry(func); new_func(x1)(x2)(),再new_func(y1)(y2)(y3)(),怎样保证两次互不影响

var currying = function(func) {
  let args = [];
  return function result(...rest) {
    if (rest.length === 0) {
      ans = func(...args)
      args = [];
      return ans;
    }
    args.push(...rest)
    return result
  }
}
相关文章
相关标签/搜索