• 实现一个函数,运算结果可以满足如下预期结果:

add(1)(2) // 3
add(1, 2, 3)(10) // 16

add(1)(2)(3)(4)(5) // 15

function add () {
var args = Array.prototype.slice.call(arguments); var fn = function () {
var arg_fn = Array.prototype.slice.call(arguments);
return add.apply(null, args.concat(arg_fn));
} fn.valueOf = function () {
return args.reduce(function(a, b) {
return a + b;
})
} return fn;
} console.log(add(1)); //1
console.log(add(1, 2)); //3
console.log(add(1, 2)(3)); //6
console.log(add(1)(2)(3)(4)); //10

可以看到,这里其实有一种循环。只有最后一次调用才真正调用到 valueOf,而之前的操作都是合并参数,递归调用本身,由于最后一次调用返回的是一个 fn 函数,所以最终调用了函数的 fn.valueOf,并且利用了 reduce 方法对所有参数求和.

最新文章

  1. matlab 循环读入多个mat文件组合成一个mat文件
  2. 疑惑的 java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L
  3. java 文件压缩和解压(ZipInputStream, ZipOutputStream)
  4. Java NIO示例:多人网络聊天室
  5. 定时器图片轮播淡入淡出基本功能已实现,正在修改BUG中。。(附图效果和源代码)
  6. [crunch bang]在Crunch Bang安装和设置fcitx(小企鹅输入法)
  7. Java JDBC 驱动 MySQL
  8. eclipse或IDEA连接魅蓝
  9. Photoshop学习之路
  10. angular4升级angular5问题记录之this.location.back()
  11. hihocoder 1035 : 自驾旅行 III
  12. 一张图看懂AR至GL数据流
  13. 关于delete请求,后台接收不到数据
  14. [smf]smf论坛也很漂亮
  15. Tomcat的目录结构及部署应用程序
  16. HTML5规范尘埃落定,5个开发工具推荐
  17. BIO、NIO、AIO系列一:NIO
  18. FFMPEG转换WAV到MP3
  19. 52道Python面试题
  20. Spring事务的隔离级别

热门文章

  1. category类别中添加属性
  2. C++ Primer 5 CH1 开始
  3. CSS3 贝塞尔曲线实现
  4. 腾讯云总监手把手教你,如何成为AI工程师?
  5. 2.4G无线收发模块/射频RFM75调试总结/RF知识整理
  6. 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典
  7. web与request
  8. PMP和PRINCE2应该选择哪个?光环国际项目管理认证
  9. cookie技术简介
  10. Vijos1523贪吃的九头龙【树形DP】