无限调用函数add(1)(2)(3)......

无限调用函数,而且累计结果

其实这也算一道面试题吧,笔者曾经被提问过,惋惜当时没能答上来。。。 💔 如今来研究一下吧。面试

解析

这个问题有两个重点,一是无限调用;二是累计结果。首先,累计结果比较简单,用闭包实现便可。难点在于无限调用。
关于无限调用,一开始是想重复调用函数自身,可是在何时中止呢?想了许久没找到合适的点;后来转了一下思路,仍是重复返回函数自身,经过改写.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
相关文章
相关标签/搜索