js 深入原理讲解系列-currying function

能看懂这一题你就掌握了 js 科里函数的核心原理

不要专业的术语,说人话,讲明白!

Q: 实现 sum 函数使得以下表达式的值正确

const log = console.log;

const sum = ???;

sum(1, 2, 3).sumOf(); //6
sum(2, 3)(2).sumOf(); //7
sum(1)(2)(3)(4).sumOf(); //10
sum(2)(4, 1)(2).sumOf(); //9

A: 原型链

// bug
function sum(...args) {
let len = sum.length;
// let args = arguments;
return function curry (args) {
if(args.length <= len) {
return sum.apply(sum, ...args)
} else {
return function (...args2) {
curry.apply(sum, args.concat(...args2))
}
}
this.sumOf = function() {
return this.curry();
}
}
}
// OK
const sum = (...args) => {
const collectArgs = (...collectedArgs) => sum(...collectedArgs, ...args)
collectArgs.sumOf = () => args.reduce((a, b) => a + b, 0);
return collectArgs;
}

科里函数 / currying function

高阶函数

科里化

原型链

闭包

closure

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


最新文章

  1. 利用opencv训练样本分类
  2. 从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
  3. android 获取SD卡相关信息
  4. ASP.NET MVC系列:添加模型的验证规则
  5. [20140722] forwarded和forwarding记录
  6. [转]FastJSON通过SerializeFilter定制序列化
  7. BizTalk动手实验(五)Map开发测试
  8. Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能
  9. Java ConcurrentHashMap
  10. Django 学习
  11. ThinkPhp之分页
  12. Android清空画布
  13. uva 11992 - Fast Matrix Operations
  14. AVL树相关操作
  15. Winform 窗体获得焦点
  16. Linux分页机制之概述--Linux内存管理(六)
  17. Linux如何挂载U盘
  18. Debian下undefined reference to ‘pthread_create’问题解决
  19. sql面试题-----行转列
  20. Thrift IDL

热门文章

  1. Centos 安装postgreSQL9.4.3
  2. 一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践
  3. 自动化接口差异测试-diffy 回归测试 charles rewrite 请求
  4. Server:www121 Server:www120 Server:NWS_SP 内容被散列,并在响应中放入Etag When to Use Entity-Tags and Last-Modified Dates
  5. Spring Cloud Config、Apollo、Nacos配置中心选型及对比
  6. JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
  7. Django(ORM单表操作)
  8. Java中finalize()方法的作用
  9. 【noi 2.5_7834】分成互质组(dfs)
  10. hdu3033 I love sneakers!