其实这也算一道面试题吧,笔者曾经被提问过,惋惜当时没能答上来。。。 💔 如今来研究一下吧。面试
这个问题有两个重点,一是无限调用;二是累计结果。首先,累计结果比较简单,用闭包实现便可。难点在于无限调用。
关于无限调用,一开始是想重复调用函数自身,可是在何时中止呢?想了许久没找到合适的点;后来转了一下思路,仍是重复返回函数自身,经过改写.toString方法来返回累计结果。闭包
//实现一个累加的函数 var add = (function(){ var total = 0; function _add(){ if(arguments[0]){ total += arguments[0]; return _add; } } //关键 _add.toString = function(){ var result = total; total = 0; return result; }; return _add; })() add(1)(2)(3) //6