CHEYNE CHEYNE
  • 注册
  • 登录
  • 分类
    • 技术
    • 游戏
    • 生活
  • 动态
  • 留言板
  • 链接
    • 社交媒体
    • 友情链接
    • 站点导航
  • CHEYNE 导航
首页 › 技术 › 实现 sum(1)(2)(3)(...n)

实现 sum(1)(2)(3)(...n)

cheyne
2年前技术
1,374 0 0
function sum(x) {
  let num = x;
  let tmp = function(y) {
    num = num + y;
    return tmp;
  }
  tmp.toString = function() {
    return num;
  };
  return tmp;
}

console.log(sum(1)(2)(3)(4));  // 10

// others
const sum = a => b => b ? sum( a + b ) : a;
console.log(sum(1)(2)(3)(4)());
首先要一个数记住每次的计算值,所以使用了闭包,在 tmp 中记住了 x 的值,第一次调用 sum() ,初始化了 tmp,并将 x 保存在 tmp 的作用链中,然后返回 tmp 保证了第二次调用的是 tmp 函数,后面的计算都是在调用 tmp, 因为 tmp 也是返回的自己,保证了第二次之后的调用也是调用 tmp,而在 tmp 中将传入的参数与保存在作用链中 x 相加并付给 num,这样就保证了计算; 但是在计算完成后还是返回了 tmp 这个函数,这样就获取不到计算的结果了,我们需要的结果是一个计算的数字那么怎么办呢,首先要知道 JavaScript 中,打印和相加计算,会分别调用 toString 或 valueOf 函数,所以我们重写 tmp 的 toString 和 valueOf 方法,返回 num 的值;
JavaScript
0
本文系作者 @cheyne 原创发布在 CHEYNE。未经许可,禁止转载。
WordPress 更换域名
上一篇
BBR 加速 CentOS
下一篇
评论 (0)
再想想
聚合文章
Git 设置保存用户名密码
1年前
Math.pow 封装
1年前
Valheim 英灵神殿 服务器搭建(待更新)
1年前
WordPress 提示需要访问您网页服务器的权限解决方法
1年前
标签
Chrome CSS Docker Git JavaScript Linux MacOS Nginx Steam Typecho Windows WordPress Yarn Youtrack
相关文章
Git 设置保存用户名密码
Math.pow 封装
Valheim 英灵神殿 服务器搭建(待更新)
Typecho 开启 Gzip
关于

🍊Σ(゚д゚lll)前端工程师。

社交媒体
Bilibili Steam
导航
分类 技术 游戏 生活 动态 留言板 链接 社交媒体 友情链接 站点导航 CHEYNE 导航
Copyright © 2019-2022 CHEYNE. 苏ICP备16006033号
  • 分类
    • 技术
    • 游戏
    • 生活
  • 动态
  • 留言板
  • 链接
    • 社交媒体
    • 友情链接
    • 站点导航
  • CHEYNE 导航
热门搜索
  • Youtrack
  • Yarn
  • Nginx
  • CSS
  • JavaScript
  • Linux
  • Windows
  • MacOS
  • Docker
  • Git
  • Chrome
  • Typecho
  • WordPress
  • Steam
cheyne
33 文章
3 评论
6 喜欢
  • 0
  • 0
  • Top