add()每次都会返回一个函数sum , 直到最后一个没被调用 , 默认会触发toString方法 , 所以我们这里重写toString方法 , 并返回累计的最终值a这样说才能理解:
add(10): 执行函数add(10) , 返回了sum函数 , 注意这一次没有调用sum , 默认执行sum.toString方法 。所以输出10;
add(10)(20): 执行函数add(10) , 返回sum(此时a为10) , 再执行sum(20) , 此时a为30 , 返回sum , 最后调用sum.toString()输出30 。add(10)(20)…(n)依次类推 。
3. 柯里化实现多参累加这里是上面累加的升级版 , 实现多参数传递累加 。
add(1)(3,4)(3,5)// 16add(2)(2)(3,5)// 12复制代码function add(){// 1 把所有参数转换成数组let args = Array.prototype.slice.call(arguments)// 2 再次调用add函数 , 传递合并当前与之前的参数let fn = function() {let arg_fn = Array.prototype.slice.call(arguments)return add.apply(null, args.concat(arg_fn))}// 3 最后默认调用 , 返回合并的值fn.toString = function() {return args.reduce(function(a, b) {return a + b})}return fn}// ES6写法function add () {let args = [...arguments];let fn = function(){return add.apply(null, args.concat([...arguments]))}fn.toString = () => args.reduce((a, b) => a + b)return fn;}
经验总结扩展阅读
- A血型男与A血型女婚配好不好,相处之道全面解析
- 蒲鱼的效果和作用 蒲鱼的营养价值分析
- 泡温泉的好处与禁忌 下面给大家分析
- 2021广东12月底全面停工真的假的
- 章鱼的智商到底有多高 章鱼的智商分析
- 我们能看见全面的地球么?为什么?
- 松静自然的生理学基础是什么? 生理学分析
- 灭霸打得过孙悟空吗? 具体原因分析
- 吴用的性格特点分析 他都有什么特点
- 非物质文化遗产保护方法 非物质文化遗产保护方法是什么
