已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数
var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);
6
var fn = function (a, b, c) {return a + b + c}; curryIt(fn)(1)(2)(3);6
function curryIt(fn) {
return (a) => {
return (b) => {
return (c) => {
return fn(a,b,c);
}
}
}
} function curryIt(fn) {
const result = a => b => c => fn.call(this,a,b,c)
return result
} function curryIt(fn) {
return (a) => {
return (b) => {
return (c) => a + b + c;
}
}
}
// 简写
function curryIt(fn) {
return (a) => (b) => (c) => a + b + c;
}
}
// recursion 递归 call,接收非数组 apply,接收数组
// args通过push, length变大
function curryIt(fn){
let args = []
return function recursion(arg){
args.push(arg)
if (args.length < fn.length) {
return function (arg2){
return recursion.call(null,arg2);
}
}
return fn.apply(null,args)
}
}
function curryIt(fn) {
let args = []
function a(arg){ // 1、 a 的 length 属性值为 1(即显式声明 a 接收一个参数)
args.push(arg)
return b; // 2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
}
function b(arg){
args.push(arg)
return c; // 3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
}
function c(arg){
args.push(arg);
return fn(...args); // 4、调用 c 之后,返回的结果与调用 fn 的返回值一致
// 5、fn 的参数依次为函数 a, b, c 的调用参数 ...args
}
return a; // 1、 返回一个函数 a;
}