如何用 JavaScript 实现 add(1)(2)(3)
add(1)(2)(3)
有一道前端经典的面试题,实现 add(1)(2)(3)。
这一道题是为了实现累加方法,乍一想实现累加不是很简单的么,不过这道题目的要求是(1)(2)(3)
这样子传参来实现的。
所以简单分析就能得出内部肯定是方法套方法的样式。
具体分析:
传递的参数是否是恒定的
如果只是对于1、2、3
这三个值,最简单的就是直接针对性编写方法:
复制代码
但是这种方式只能算是固定情形,不能做到更多的变化。
比如针对add(1)(2)(3)(4)(5)
和add(1, 2, 3)(4)
这种类型就不能得出答案了,所以还需要进行改进。
这里可以使用柯里化的概念。
柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
具体的柯里化这里就不多做解释了,其实就是将原先的add(x, y)
变成了add(x)(y)
这样只接受单一参数的形式
参考文章:
这里题目的解答:
在add
方法当中再设置一个_add
方法和一个arr
数组,此_add
方法中可以进行参数判断,如果传入的参数依旧存在,那么 arr 数组中添加入此次的参数。否则进行参数累加计算。
复制代码
需要的计算结果:
复制代码
这样,经典的柯里化面试题 add(1)(2)(3)就完成了
版权声明: 本文为 InfoQ 作者【空城机】的原创文章。
原文链接:【http://xie.infoq.cn/article/460b1dc4c06a5517ce37719ff】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论