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月底全面停工真的假的
- 章鱼的智商到底有多高 章鱼的智商分析
- 我们能看见全面的地球么?为什么?
- 松静自然的生理学基础是什么? 生理学分析
- 灭霸打得过孙悟空吗? 具体原因分析
- 吴用的性格特点分析 他都有什么特点
- 非物质文化遗产保护方法 非物质文化遗产保护方法是什么