函数柯里化问题
//函数柯里化 这个可以理解
// curry = fn => {
// let arr = [];//保存之前输入的参数
// judge = (...args)=>{
// if(!args[args.length-1]){
// return fn(arr);
// }else{
// arr.push(...args);
// return judge;//返回一个表达式 调用才会执行
// }
//
// };
// return judge;
// }
//函数柯里化
curry = fn => judge = (...args)=>{
return !args[args.length-1]?fn(args):(...arg)=>judge(...args,...arg);//judge立即执行 调用自身 这不会死循环吗?
};
testCurry = (args)=>{
args.pop();//去掉最后一个参数null
if(args.length<1){
return;
}
let sum = args.reduce((s,n)=>{
return s+n;
},0);
console.log('参数',args);
console.log('sum',sum);
return sum;
};
OnClick =()=>{
console.log('执行了这里 OnClick');
let one = this.curry(this.testCurry)(1);
let two = one(2)(3)(4)(5);
let three = two(6,6,6,6);
three(null);
};
请问第二个函数怎么理解 她是怎么保存之前输入的参数的?
求详细解答 谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
judge
并没有立即执行,而是在(...arg)=>judge(...args,...arg);
方法被调用时才被执行这个curry后的函数只有在传入的最后一个参数可以被转换为
false
的时候才开始执行,它存参数的方法也很简单1,判断如果最后一个参数是否可以是
false
2,是的话就把所有保存的参数放到
fn
里执行,结束3,否则,返回一个新的匿名函数,这个函数把所有传入参数保存在
arg
数组中,而这个匿名函数被执行后,就把以前收到的参数数组和当前的参数数组合并后,放到前面说的逻辑中,在judge函数里判断,重复第1步