无限调用函数,并且累计结果
其实这也算一道面试题吧,笔者曾经被提问过,可惜当时没能答上来。。。 ? 现在来研究一下吧。
解析
这个问题有两个重点,一是无限调用;二是累计结果。首先,累计结果比较简单,用闭包实现即可。难点在于无限调用。
关于无限调用,一开始是想重复调用函数自身,但是在什么时候停止呢?想了许久没找到合适的点;后来转了一下思路,还是重复返回函数自身,通过改写.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