面试的时候面试官出了一道题目很有意思。问的是这样的。假如我有一个方法add。如何实现形如add(1)(2)调用返回3
这道题答案很简单,如下:
1  | function add (x) {  | 
但我当时第一时间的反应是这样的: 如何实现形如add(1)(2)(3)...(n)这样的链式调用。
首先这个问题有两个难点:
- 1.如何解决累加结果的存储问题
 - 2.如何解决他返回的方法可以作为结果来使用
 
首先这第一个问题是好解决的。只需要在内部存储计数器即可。而第二个问题是无法完全解决的。因为如果要实现链式调用那么返回必须是函数。而函数的typeof值是function, 永远不能作为一个number使用。但是如果放宽限制。我们可以用过重写方法的toString函数来实现对一些隐式调用转换为字符串的匹配。
代码如下:
1  | var sum = 0;  | 
当然,这里有个问题。就是封装性不好。会污染全局变量。那么我们把add方法做一下闭包处理进行优化一下:
1  | function add(x) {  |