实现一个无限累加的 sum 函数

实现一个 sum 函数如下所示:

1
2
3
4
5
sum(1, 2, 3).valueOf(); //6
sum(2, 3)(2).valueOf(); //7
sum(1)(2)(3)(4).valueOf(); //10
sum(2)(4, 1)(2).valueOf(); //9
sum(1)(2)(3)(4)(5)(6).valueOf(); // 21

 可以这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function sum(...args) {
  // allArgs 收集所有的 args
  let allArgs = args;
 
  // 返回一个 function 可以接受参数
  function fn(...args2) {
    allArgs = allArgs.concat(args2);
    return fn;
  }
 
  // function 上有一个属性叫 valueOf
  fn.valueOf = function () {
    // valueOf 触发时才开始累加
    return allArgs.reduce((res, cur) => (res += cur));
  };
  return fn;
}

 简化一下

1
2
3
4
5
function sum(...args) {
  const f = (...rest) => sum(...args, ...rest);
  f.valueOf = () => args.reduce((x, y) => x + y, 0);
  return f;
}

  

posted @   疾风_剑豪  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示