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

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

cheyne
3年前技术阅读 1,416
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) 收藏(0)
WordPress 更换域名
上一篇
BBR 加速 CentOS
下一篇
再想想
暂无评论
聚合文章
Git 设置保存用户名密码
Math.pow 封装
Valheim 英灵神殿 服务器搭建(待更新)
WordPress 提示需要访问您网页服务器的权限解决方法
标签
Chrome CSS Docker Git JavaScript Linux MacOS Nginx Steam Typecho Windows WordPress Yarn Youtrack
Git 设置保存用户名密码
2年前
546 0 0
Math.pow 封装
2年前
607 0 2
Valheim 英灵神殿 服务器搭建(待更新)
2年前
1,088 0 0
Typecho 开启 Gzip
3年前
1,033 1 0
  • 0
  • 0
关于

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

社交媒体
Bilibili Steam
导航
分类 技术 游戏 生活 动态 留言板 链接 社交媒体 友情链接 站点导航 CHEYNE 导航
Copyright © 2019-2023 CHEYNE. Designed by nicetheme. 苏ICP备16006033号
  • 分类
    • 技术
    • 游戏
    • 生活
  • 动态
  • 留言板
  • 链接
    • 社交媒体
    • 友情链接
    • 站点导航
  • CHEYNE 导航
# Youtrack # # Yarn # # Nginx # # CSS # # JavaScript #
cheyne
33
文章
3
评论
7
喜欢