無限調用函數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
相關文章
相關標籤/搜索