使用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) { }
- 2.通用柯里化函数
currying(func) { // return function: func(a1, a2, a3, ...) -> func_c(a1)(a2)(a3)... }
- 2.手写柯里化函数 -柯里化在工程中有什么用处?
https://www.zhihu.com/answer/192978122segmentfault
- 详解JS函数的柯里化:https://www.jianshu.com/p/2975c25e4d71
柯里化实现与问题: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 } }